asp.net 转发器 - 获取对当前项目的引用

本文关键字:项目 引用 net 转发器 获取 asp | 更新日期: 2023-09-27 18:33:46

我正在使用 Asp.net 4.5,C#。我有一个收割机,它有一些数据源绑定:

  <asp:Repeater ItemType="Product" ID="ProductsArea" runat="server">
            <HeaderTemplate></HeaderTemplate>
            <ItemTemplate>
                ...  
            </ItemTemplate>
            <FooterTemplate></FooterTemplate>
        </asp:Repeater>    

在这个中继器中,我想引用当前的迭代项目。我知道我可以使用<%#Item%>,而且我可以使用<%#Container.DataItem%>。如果我想进入一个字段,我可以使用它<%#Item.fieldName%>或 Eval 它。

但是我想在田野上做一个条件,我怎样才能得到对 #Item 的引用才能做这样的事情:

<% if (#Item.field>3)%>, <%if (#Container.DataItem.field<4)%> 

我想有这样的参考 <%var item = #Item%>,而不是在需要时使用它。

当然上面的语法是无效的,如何实现这个正确?

asp.net 转发器 - 获取对当前项目的引用

我会改用ItemDataBound。这使得代码更具可读性、可维护性和健壮性(编译时类型安全(。

protected void Product_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        // presuming the source of the repeater is a DataTable:
        DataRowView rv = (DataRowView) e.Item.DataItem;
        string field4 = rv.Row.Field<string>(3); // presuming the type of it is string
        // ...
    }
}

e.Item.DataItem转换为实际类型。如果需要在ItemTemplate中找到控件,请使用 e.Item.FindControl 并适当地强制转换它。当然,您必须添加事件处理程序:

<asp:Repeater OnItemDataBound="Product_ItemDataBound" ItemType="Product" ID="ProductsArea" runat="server">