被沧海依粟抛弃的Blog

感情不是一盏灯...

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

Feedback

#1楼  回复 引用 查看   

2007-04-18 10:10 by 风轻如梦      
It’s all or nothing baby! Exactly what I needed.
刚刚好,不多也不少,正是我想要的结果。

#2楼[楼主]  回复 引用 查看   

2007-04-18 21:58 by 沧海依粟      
@风轻如梦
谢谢你.

#3楼  回复 引用 查看   

2008-08-08 12:56 by Wuya      
我的做法是这样的:
创建一个处理绑定数据的方法,例如:
protect string BindValue(object obj1,object obj2)
{
//处理obj1和obj2得到结果字符串的逻辑
return "result";
}

在页面中控件里可以类似如下的绑定:
<%# BindValue(Eval("field1"),Eval("field2")) %>