在页面上绑定数据时,经常要进行一些简单的转换,比如:1显示为“是”,0显示为“否”,那么就想着在前台页面上写个if语句判断:
<%if(Eval("delete").ToString()=="1")%>
编译是可以通过,没问题,但运行时提示:Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用。
于是上网查后,改用DataBinder.Eval:
<% if(DataBinder.Eval(Container.DataItem,"delete").ToString()=="1")%>
本来以为可以了,但是这个Container.DataItem却提示:当前上下文中不存在名称“Container”。
经过一翻折腾后改成了(也就是加了个#):
<%# if(DataBinder.Eval(Container.DataItem,"delete").ToString()=="1")%>
这时候提示:无效的表达式“if”。不允许使用if语句?于是想到了三元运算符,改成:
<%# DataBinder.Eval(Container.DataItem, "delete").toString() == "1"?"是":"否" %>
OK了,正常显示。
Container是什么?Container即容器,指父控件;DataItem指父控件所绑定的数据源的当前行,不是字段。
ASP.NET 提供了一个名为 DataBinder.Eval 的静态方法,该方法计算后期绑定的数据绑定表达式,并将结果格式化为字符串(可选)。利用此方法,可以避免许多在将值强制为所需数据类型时必须执行的显式强制转换操作。
如果只是做简单的判断,可以用上面的三元运算符来解决,如果复杂的,建议后台写个public方法,以提供前台进行调用。