2010-04-03 28 views
30

sto ottenendo il seguente erroremetodi di associazione dati come Eval(), XPath() e Bind() possono essere utilizzati solo nel contesto di un controllo databound

metodi di associazione dati come Eval(), XPath() e Bind() possono essere utilizzati solo nel contesto di un controllo di database.

ma tutto quello che sto cercando di fare è all'interno di un controllo ASP.NET RIPETITORE

<% if (Eval("Message").ToString() == HttpContext.Current.Profile.UserName) %> 
<% { %> 

      <asp:ImageButton runat="server" etc.... /> 
<% } %> 

risposta

42

La sintassi è

<%# Eval("...") %> 

Si potrebbe fare qualcosa di simile

<asp:ImageButton Visible='<%# ShowImg(Eval(Container.DataItem,"Message")) %>' /> 

e nel codice code:

boolean ShowImg(string msg) 
{ 
    return (msg == HttpContext.Current.Profile.UserName); 
} 
+0

bello, mi piace questa soluzione, ma ciò che è Container.DataItem. Durante la ricerca di una risposta in linea mi sono imbattuto anche ma non riesco a far riferimento al mio progetto grazie per la risposta – Dan

+0

Cool che ha funzionato ... ho usato il seguente Dan

+0

Sì, puoi lasciare fuori Container.DataItem, vedere http://msdn.microsoft.com/en-us/library/system.web.ui. databinder.eval.aspx – Steve

28

Un'alternativa è questo:

<asp:ImageButton runat="server" Visible='<%# Eval("Message").ToString() == HttpContext.Current.Profile.UserName %>' /> 

allora non c'è bisogno di codice sottostante.

+0

Funziona alla grande. Puoi anche usarlo al posto di un'istruzione If. Metti semplicemente due di questi controlli con i parametri Visible per uno come == e l'altro come! = (O qualunque sia la tua logica) – Ruan

1

Un altro modo per la sua attuazione:

public string nonImage() { 
    string imgTag = "", Article_OwnerID = "", Article_ID = "", Article_OwnerType = "", imgSrc = ""; 
    DataTable DtArticles = SE_Article.GetArticlesList(UserID, UserID, ProfileType, CounterOfPage, CountPerPage, (short) SE_Action.OwnerType.user, SE_Security.CheckInjection(TxtSearch.Text.Trim()), CategoryID, "all_articles", DrpOrderBy.SelectedValue, DrpSort.SelectedValue); 
    if (DtArticles != null && DtArticles.Rows.Count > 0) { 
     Article_OwnerID = DtArticles.Rows[0]["Article_OwnerID"].ToString(); 
     Article_ID = DtArticles.Rows[0]["Article_ID"].ToString(); 
     Article_OwnerType = DtArticles.Rows[0]["Article_OwnerType"].ToString(); 
    } 
    if (SE_Article.GetArticleCover(Convert.ToInt32(Article_OwnerID), Convert.ToInt32(Article_ID), Convert.ToInt16(Article_OwnerType)) != System.Configuration.ConfigurationManager.AppSettings["NoPhotoArticleThumb"]) { 
     imgSrc = SE_Article.GetArticleCover(Convert.ToInt32(Article_OwnerID), Convert.ToInt32(Article_ID), Convert.ToInt16(Article_OwnerType)); 
     imgTag = "<img class='img_article_cover' src='" + imgSrc + "' alt='مقاله" + Article_ID + "' />"; 
    } 
    return imgTag; 
} 


<% nonImage(); %> 
2

che sia troppo tardi, ma vorrei rispondere a modo mio, quello che ho usato per raggiungerlo:

<%# Eval("Message").toString()== HttpContext.Current.Profile.UserName)?"<asp:ImageButton runat="server" etc.... />" :""%> 

Ora questo sarà solo spettacolo pulsante immagine se il messaggio è uguale a nome utente.

Questo potrebbe aiutare chiunque altro nella stessa situazione.

Nella mia situazione ho bisogno di controllare stringa nulla e vuota ... così ho implementato come questo qui sotto:

<%# Eval("DateString")!= null && Eval("DateString")!= ""? "<span class='date'>"+Eval("DateString") + "</span>":"" %> 

Grazie

Problemi correlati