[翻译][收藏].Net数据绑定技巧:嵌套 Eval 综述

Posted on 2007-04-17 00:51 沧海依粟 阅读(...) 评论(...) 编辑 收藏
    题记:看到比较好的文章,就想收藏起来.可是对于英文的文单,看一遍就得翻译一遍,比较麻烦,也有可能是我的记性不好吧.哎...今天在博客园的首页看到这篇推荐,觉得不错,就收了下来,顺便译了一下.呵呵..
    对于大家来说也许嵌套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
  • 安全快速不中毒的浏览器:
  • 写博客也能赚钱: