首页 文章

ASP.NET Repeater ItemDataBound事件中等效的Eval(“field”)?

提问于
浏览
8

我想在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");
    }
}

2 回答

  • 9

    如果在编译时不知道类型是什么,则唯一的选择是将is作为对象(这是DataItem属性的默认返回类型) .

    您可以尝试使用:

    object item = DataBinder.Eval(e.Item.DataItem, "fieldname");
    

    你're still stuck with an object at the end of that call, but (assuming the call is successful) you'知道 item 有一个名为 fieldname 的属性 . 我不想尝试做 .

  • 0

    而不是 xxx item = (xxx)e.Item.DataItem;

    写下来:

    var item = e.Item.DataItem;
    

    或者可能:

    object item = e.Item.DataItem;
    

相关问题