是否等效于ASP.NET Repeater ItemDataBound事件中的Eval“ field”?

问题描述

| 我想在ASP.NET中继器ItemDataBound事件中执行Eval(\“ field \”)的等效操作,但是不确定将e.Item.DataItem强制转换为什么。数据源类型可能会有所不同,因为这是自定义控件中的可重用代码。那么,如何通过字段名称(字符串)访问e.Item.DataItem中的字段? 理想情况下,我想执行以下操作:
protected void Repeater1_ItemDataBound(object sender,RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
    {
        xxx item = (xxx)e.Item.DataItem;
        string fieldValue = item(\"fieldname\");
    }
}
    

解决方法

        如果您在编译时不知道类型是什么,那么您唯一的选择就是将其视为一个对象(这是
DataItem
属性的默认返回类型)。 您可以尝试使用:
object item = DataBinder.Eval(e.Item.DataItem,\"fieldname\");
在调用结束时,您仍然停留在某个对象上,但是(假设调用成功)您将知道
item
具有名为
fieldname
的属性。我不知道是否有帮助。也许用有关您要做什么的更多详细信息来更新您的问题。     ,        而不是
xxx item = (xxx)e.Item.DataItem;
写下来:
var item = e.Item.DataItem;
或许:
object item = e.Item.DataItem;
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...