对于大家来说也许嵌套Eval是件很简单的事件,但是对于我来说这并不那么简单.我在绑定一个Repeater的时候,想基于数据库的两个数字列来输出一个Repeater列.这好像并没有什么困难,表面上看它就是简单的将两个数据格式化成如下格式:42, (123)
最简单的方法是在列中两个绑定标签.如我会做如下的绑定:
<%# Eval("First") %>, (<%# Eval("Second") %>)
现在问题就出来了,假如我的第一个参数为空的话,输出将变成如下的样子:
, (123)
不过利用格式化字符串的方法可以很容易的解决这个问题.如:
<%# Eval("First", "{0}, ") %>(<%# Eval("Second") %>)
但是现在我需要如果第一个值为空,那么第二个值也以空白显示.嗯...有一种很丑的方式去实现.如:
<%# Eval("First", "{0}, ") %>
<%# Eval("First").GetType() == typeof(DBNull) ? "" : Eval("Second", "({0})")%>
很不爽吧,呵呵,你觉得呢?写法很丑陋并且让人阅读的不爽.但是接着我发现可以尝试这样:
<%# Eval("First", "{0}, " + Eval("Second", "({0})")) %>
现在看起来是不是好很多了呢?我将第二个"Eval"标签放嵌套在了第一个的Format字符串中.这样如果但一个值为空,整个字符串都将以空白显示.It’s all or nothing baby! Exactly what I needed.(这句怎么译,知道的告诉下.)
作者注:这是因为在格式化字段中,如果你传如的值为null值,如:string.Format("{0},", null),将会得到一个异常.在Eval中,异常会被处理并显示空值.
原文网址:http://haacked.com/archive/2007/04/12/databinding-tips-nesting-eval-statements.aspx
- 安全快速不中毒的浏览器:
- 写博客也能赚钱: