Asp.net 诸如Eval()、XPath()和Bind()之类的数据绑定方法只能在数据绑定控件的上下文中使用

Asp.net 诸如Eval()、XPath()和Bind()之类的数据绑定方法只能在数据绑定控件的上下文中使用,asp.net,repeater,eval,Asp.net,Repeater,Eval,我得到以下错误 诸如Eval()、XPath()和Bind()之类的数据绑定方法只能在数据绑定控件的上下文中使用 但我所要做的只是在ASP.NET REPEATER控件中 <% if ( Eval("Message").ToString() == HttpContext.Current.Profile.UserName) %> <% { %> <asp:ImageButton runat="server" etc.... /> <

我得到以下错误

诸如Eval()、XPath()和Bind()之类的数据绑定方法只能在数据绑定控件的上下文中使用

但我所要做的只是在ASP.NET REPEATER控件中

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

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

语法是

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

另一种选择是:

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


这样就不需要代码隐藏。

另一种实现方法:

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(); %>
公共字符串nonImage(){
字符串imgTag=“”,Article_OwnerID=“”,Article_ID=“”,Article_OwnerType=“”,imgSrc=“”;
DataTable DtArticles=SE_Article.GetArticlesList(UserID,UserID,ProfileType,countOfPage,CountPerPage,(short)SE_Action.OwnerType.user,SE_Security.CheckInjection(TxtSearch.Text.Trim()),CategoryID,“所有文章”,DrpOrderBy.SelectedValue,DrpSort.SelectedValue);
如果(DtArticles!=null&&DtArticles.Rows.Count>0){
Article_OwnerID=DtArticles.Rows[0][“Article_OwnerID”].ToString();
Article\u ID=DtArticles.Rows[0][“Article\u 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.ConfigurationManager.AppSettings[“NoPhotoArticleThumb”]){
imgSrc=SE_Article.GetArticleCover(Convert.ToInt32(Article_OwnerID)、Convert.ToInt32(Article_ID)、Convert.ToInt16(Article_OwnerType));
imgTag=“”;
}
返回imgTag;
}

虽然为时已晚,但我想用我的方式来回答这个问题,我曾经实现过:

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

现在,只有当消息等于用户名时,才会显示图像按钮

这可能会帮助其他处于同样情况的人

在我的情况下,我需要检查null和空字符串…因此我实现如下:

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


谢谢

很好,我喜欢这个解决方案,但什么是Container.DataItem呢。当我在网上搜索答案时,我也遇到了它,但似乎无法在我的项目中引用它。谢谢你的回复。。。我使用了以下选项:是的,您可以省略Container.DataItem,有关类似的情况,请参阅:我必须完全指定DataBinder,例如:
DataBinder.Eval(Container.DataItem,“Message”)
。我想在repeater中使用IF-ELSE!我该怎么做?很好。你甚至可以用它来代替If语句。只需将其中两个控件与一个as==和另一个as!=的可见参数放在一起(或者不管你的逻辑是什么)
<%# Eval("Message").toString()== HttpContext.Current.Profile.UserName)?"<asp:ImageButton runat="server" etc.... />" :""%>
<%# Eval("DateString")!= null && Eval("DateString")!= ""? "<span class='date'>"+Eval("DateString") + "</span>":"" %>