【问题标题】:How to set conditions based on Eval() value?如何根据 Eval() 值设置条件?
【发布时间】:2014-01-24 00:59:15
【问题描述】:

我有这个代码

<div class="result correct"><%# Eval("QandAID") %></div>

我想知道如何设置值的条件,即如果 eval 值为 2,则将 div 类更改为“结果不正确”,否则保留为“结果正确”。如果有人知道如何做到这一点(根据条件更改 div 类),这也是问题的一部分,那将是一个奖励。

哦,我在一个绑定到数据集的转发器中拥有该代码。

【问题讨论】:

    标签: c# asp.net webforms


    【解决方案1】:

    在 Page 类中定义一个属性:

    public int MyValue { get; set; }
    

    然后在页面中这样访问:

    <div style='width: <%=MyValue %>px'></div>
    

    此示例应间接回答您的问题,并为如何将值放入可能绑定或不绑定到 DataRow 的 HTML 提供更多可能性。

    另一个例子:

    <%# Eval("QandAid") == 2 ? "result incorrect" : "result correct" %>
    

    或者:

    <div class='<%# Eval("QandAid") == 2 ? "class1" : "class2" %>'>
    

    【讨论】:

    • 两个答案都有效,但你的问题又提出了另一个问题,
    • 我刚刚运行了你的最后一行代码,它一直抛出错误...运算符'=='不能应用于'object'和'int'类型的操作数
    • Eval("QandAid") 返回一个对象。您可以尝试使用 (int) 强制转换将其拆箱,或者 QandAid 是您可以强制转换的另一种类型。 Eval 只返回一个必须强制转换才能使某些东西有用的对象,例如: ((MyClass)Eval("myVar")).X == 2 或类似
    • 正如您评论的那样,我已将其更改为 convert.int32(Eval("QandAID")) == 1 并且它有效。过了一会儿,我点击并意识到我必须转换它或投射它。
    【解决方案2】:

    这应该发生在标记之外。将类设为模型的属性并根据您的条件进行设置:

    class YourModel {
        public int QandAID { get; set; }
        public string ValidityClass {
            get {
                return QandAID == 1 ? "correct" : "incorrect";
            }
        }
    }
    

    然后你的转发器模板变成这样:

    <div class='result <%# Eval("ValidityClass") %>'><%# Eval("QandAID") %></div>
    

    【讨论】:

    • 与上面的其他答案一样,它可以工作。你的也提出了一个问题。为什么我们可以访问公共字符串,但不能访问代码隐藏中的方法?
    • 因为Eval 使用反射来查找数据绑定对象上的字段或属性。它不寻找方法。
    • 好的,这就解释了为什么我永远不能那样调用方法。谢谢
    • 对不起,我刚刚运行了它,它抛出了这个错误...DataBinding: 'System.Data.DataRowView' 不包含名为 'ValidityClass' 的属性。
    • 您应该使用 因为它是上下文代码中的属性,而不是 DataRow 的属性。
    猜你喜欢
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 2022-10-08
    • 1970-01-01
    • 2016-04-14
    • 2019-06-11
    相关资源
    最近更新 更多