none
【ASP.NET】复杂三目运算 RRS feed

  • 问题

  • 代码如下:

    <asp:CheckBox ID="isshow" runat="server" Visible='<%# (Convert.ToBoolean(Eval("ishow")))&(Eval("url").ToString()!=""?true:false)==true?true:false%>' Text="首页展示" />


    我现在想根据两个条件进行三目运算,然后把得出的值赋值给Visible属性,从而使CheckBox控件显示与隐藏。以上我写的三目运算没有达到效果,试了很多遍实在是想不通到底错在哪里,大家帮我看看好么?                                                                    

    • 已移动 孟宪会Moderator 2010年4月21日 4:53 (发件人:.NET Framework 一般性问题讨论区)
    2010年4月20日 6:46

答案

  • & 和 && 的运算结果是一样的,只是 && 会发生“短路”,即只要第一个操作数 false 不再计算第二个操作数

    上面的代码,我只是想告诉你三元运算不是你那样的用的

    就像 boo succes = DoWork();   if(success == true) { // ... } 这里 success == true 就是多余的 直接 if(success) 简洁又大方

    严格讲如果你的 url 可能为 null,那么  Eval("url").ToString() != "" 这个表达式是通不过边界测试的,

    一般类型,需要 (Eval("SomeField") != null && Eval("SomeField").ToString() != "")

    对于 string 类型,最好 !String.IsNullOrEmpty((string)Eval("Url"))


    问题要简单,错误须详细@错误/异常/堆栈信息+操作系统+软件版本+all the context of the issue Hope Helpful | http://www.leoworks.net
    2010年4月20日 15:34
  • 需要逻辑与当然得用单个 & 了,我不清楚你的需求

    上面的代码,我只是想告诉你三元运算不是你那样的用的

    就像 boo succes = DoWork();   if(success == true) { // ... } 这里 success == true 就是多余的 直接 if(success) 简洁又大方


    问题要简单,错误须详细@错误/异常/堆栈信息+操作系统+软件版本+all the context of the issue Hope Helpful | http://www.leoworks.net
    关键是数据库里有一个字段是的值是true与bool   另一个字段是字符串型的,我要两个一起都要判断满足条件才可以true。就这样。我应该怎么改呢?我顺便问一下。<%# %> 这里可以写if么?我想我可以通过后台方法处理这个问题了
    • 已标记为答案 jinwb1982 2010年4月20日 16:09
    2010年4月20日 15:43

全部回复

  • 兄弟, 下面两个表达式是等价的
    bool f1 = Eval("url").ToString() !="" ? true : false;  
    bool f2 = Eval("url").ToString() !="";

    所以你根本就要不这么费劲,如果我没理解错,直接:

    <%# Convert.ToBoolean(Eval("ishow")) && Eval("url").ToString() != "" %>'


    问题要简单,错误须详细@错误/异常/堆栈信息+操作系统+软件版本+all the context of the issue Hope Helpful | http://www.leoworks.net
    2010年4月20日 10:27
  • 兄弟, 下面两个表达式是等价的
    bool f1 = Eval("url").ToString() !="" ? true : false;  
    bool f2 = Eval("url").ToString() !="";

    所以你根本就要不这么费劲,如果我没理解错,直接:

    <%# Convert.ToBoolean(Eval("ishow")) && Eval("url").ToString() != "" %>'


    问题要简单,错误须详细@错误/异常/堆栈信息+操作系统+软件版本+all the context of the issue Hope Helpful | http://www.leoworks.net

    l两个条件必须都得满足,看来必须要逻辑与&   条件与&& 应该达不到效果的
    2010年4月20日 15:12
  • & 和 && 的运算结果是一样的,只是 && 会发生“短路”,即只要第一个操作数 false 不再计算第二个操作数

    上面的代码,我只是想告诉你三元运算不是你那样的用的

    就像 boo succes = DoWork();   if(success == true) { // ... } 这里 success == true 就是多余的 直接 if(success) 简洁又大方

    严格讲如果你的 url 可能为 null,那么  Eval("url").ToString() != "" 这个表达式是通不过边界测试的,

    一般类型,需要 (Eval("SomeField") != null && Eval("SomeField").ToString() != "")

    对于 string 类型,最好 !String.IsNullOrEmpty((string)Eval("Url"))


    问题要简单,错误须详细@错误/异常/堆栈信息+操作系统+软件版本+all the context of the issue Hope Helpful | http://www.leoworks.net
    2010年4月20日 15:34
  • 需要逻辑与当然得用单个 & 了,我不清楚你的需求

    上面的代码,我只是想告诉你三元运算不是你那样的用的

    就像 boo succes = DoWork();   if(success == true) { // ... } 这里 success == true 就是多余的 直接 if(success) 简洁又大方


    问题要简单,错误须详细@错误/异常/堆栈信息+操作系统+软件版本+all the context of the issue Hope Helpful | http://www.leoworks.net
    关键是数据库里有一个字段是的值是true与bool   另一个字段是字符串型的,我要两个一起都要判断满足条件才可以true。就这样。我应该怎么改呢?我顺便问一下。<%# %> 这里可以写if么?我想我可以通过后台方法处理这个问题了
    • 已标记为答案 jinwb1982 2010年4月20日 16:09
    2010年4月20日 15:43
  • 可以调用方法呀

    <%# MyEvaluate(Container.DataItem) %>

    protected bool MyEvaluate(object o) {

    if(o != null) {

    // ....

    }

    // ...

    }


    问题要简单,错误须详细@错误/异常/堆栈信息+操作系统+软件版本+all the context of the issue Hope Helpful | http://www.leoworks.net
    2010年4月20日 16:14