【问题标题】:Equivalent of Eval("field") in ASP.NET Repeater ItemDataBound event?ASP.NET Repeater ItemDataBound 事件中的 Eval("field") 等价物?
【发布时间】:2011-09-14 08:14:20
【问题描述】:

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

【问题讨论】:

    标签: asp.net repeater


    【解决方案1】:

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

    写下来:

    var item = e.Item.DataItem;
    

    或者可能是:

    object item = e.Item.DataItem;
    

    【讨论】:

    • 或者使用var item = e.Item.DataItem as TypeItem;然后item.FieldName
    【解决方案2】:

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

    您可以尝试使用:

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

    在调用结束时你仍然被一个对象困住,但是(假设调用成功)你会知道item 有一个名为fieldname 的属性。我不知道这是否有帮助。也许更新您的问题,更详细地了解您正在尝试做什么。

    【讨论】:

    • DataBinder.Eval(e.Item.DataItem, "fieldname") 是我需要的信息......没有意识到我可以在后面的代码中做到这一点。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 2023-04-04
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    相关资源
    最近更新 更多