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%
>,而不是在需要时使用它。
当然上面的语法是无效的,如何实现这个正确?
我会改用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">