在asp.net中使用Eval
可以将数据绑定到控件上,但是有时候我们需要在Eval
中定义变量,例如将绑定的数据进行一些处理后再显示在页面上,但这样操作会发现定义的变量无法在Eval
之外的区域使用,因为Eval
实际上是在当前页面的上下文之外运行。在下面的攻略中,我将介绍解决这个问题的三种方法。
方法一:使用Container
属性
Container
属性可以访问数据绑定控件的引用,从而可以在Eval
绑定数据时定义变量,并在页面上下文中使用。
<%# Eval("Column1", Container.DataItem)%>
添加Container.DataItem
作为第二个参数,这样将允许我们在Eval
中使用当前项数据的上下文访问变量。
示例代码:
<%#
float.Parse(Eval("Price").ToString()) *
int.Parse(Container.DataItemIndex.ToString())
%>
方法二:使用ItemDataBound
事件
ItemDataBound
事件可让我们在绑定数据到控件之前或之后执行自定义代码。因此,我们可以在事件处理程序中定义变量并在需要时使用。
<asp:Repeater ID="Repeater1" runat="server"
OnItemDataBound="Repeater1_ItemDataBound">
...
</asp:Repeater>
在ItemDataBound
事件处理程序中,可以通过e.Item.DataItem
访问当前项的数据对象,并在函数中绑定变量。
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
var data = (DataRowView)e.Item.DataItem;
var price = float.Parse(data.Row["Price"].ToString());
var quantity = e.Item.ItemIndex + 1;
var totalPrice = price * quantity;
Label lblPrice = (Label)e.Item.FindControl("lblPrice");
lblPrice.Text = string.Format("Price: {0:C}", price);
Label lblTotalPrice = (Label)e.Item.FindControl("lblTotalPrice");
lblTotalPrice.Text = string.Format("Total price: {0:C}", totalPrice);
}
}
方法三:使用DataBinder
类
DataBinder
类包含了一些静态方法,可以在数据绑定控件中访问。其中Eval
方法可以使用当前数据项,因此可以使用该方法定义变量。
<%# DataBinder.Eval(Container.DataItem, "Column1")%>
示例代码:
<%#
float.Parse(DataBinder.Eval(Container.DataItem, "Price").ToString()) *
int.Parse(Container.DataItemIndex.ToString())
%>
以上是三种解决asp.net中Eval
不能定义变量的问题的方法,根据具体需求选择一种即可。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net中eval不能定义变量的问题的解决方法 - Python技术站