2010-04-03 8 views
30

Ich erhalte die folgenden FehlerDatenbindung Methoden wie eval(), XPath() und Bind() können nur im Rahmen einer Databound-Steuerung verwendet werden

Datenbindung Methoden wie eval(), XPath() und Bind() können nur im Kontext eines datengebundenen Steuerelements verwendet werden.

aber alles, was ich versucht habe zu tun, ist in einem ASP.NET Repeater-Steuerelement

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

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

Antwort

42

Die Syntax ist

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

Sie etwas tun könnte, wie

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

und in deinem Codebehind:

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

schön, ich mag diese Lösung aber was ist Container.DataItem. Bei der Suche nach einer Antwort online stieß ich auch darauf, aber scheint nicht in meinem Projekt zu verweisen danke für die Antwort – Dan

+0

Cool das funktionierte ... Ich habe folgende Dan

+0

Ja, Sie können das Container.DataItem auslassen, siehe http://msdn.microsoft.com/en-us/library/system.web.ui. databinder.eval.aspx – Steve

28

Eine Alternative ist:

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

Dann gibt es keine Notwendigkeit, Code-behind.

+0

Funktioniert großartig. Sie können dies sogar anstelle einer If-Anweisung verwenden. Setzen Sie einfach zwei dieser Steuerelemente mit den Visible-Parametern für eins als == und das andere als! = (Oder was auch immer Sie Logik ist) – Ruan

1

Ein anderer Weg, es zu implementieren:

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

Es ist zu spät, aber ich möchte es auf meine Weise beantworten, was ich verwendet, um es zu erreichen:

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

Dies wird nun nur Show Bild-Schaltfläche, wenn Nachricht dem Benutzernamen entspricht.

Dies könnte anderen in der gleichen Situation helfen.

In meiner Situation ich brauchte null und leere Zeichenfolge zu überprüfen ... so implementiert i dies wie folgt:

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

Dank