【问题标题】:Dynamically enable asp button based on datasource value根据数据源值动态启用asp按钮
【发布时间】:2011-03-08 08:48:07
【问题描述】:

已解决:请参阅下面的解决方案!

使用带有 C# 代码的 aspx。

我在网格视图的项目模板中的按钮中有以下代码:

Enabled='<%# IIF(Eval("wrqst_need_ind") == "Y","TRUE","FALSE") %>'

我收到以下错误:

The name 'IIF' does not exist in the current context

我做错了什么?如果我使用“IF”而不是“IIF”,我会得到同样的错误

完整的物品模板代码如下:

<ItemTemplate>
                <asp:Button  ID="wrqst_need_ind_btn" runat="server" Text = "Create WR" 
                    onClientClick="javascript:popUp('popup_createWR.aspx')"  
                    Enabled='<%# IIF(Eval("wrqst_need_ind") == "Y","TRUE","FALSE") %>'
                    CommandArgument='<%# Eval("dvc_nm") + "|" + Eval("data_orgtn_yr") %>'/>
</ItemTemplate>

如果我把线拿出来就可以了。

在我看来这应该可以工作......

编辑:我现在正在使用这个:

Enabled='<%#Eval("wrqst_need_ind") == "Y" ? "TRUE" : "FALSE" %>'

得到这个错误:

服务器标签格式不正确。

非常感谢您的帮助!

更新:

我试过这个:

Enabled='<%# Eval("wrqst_need_ind") == "Y" ? Convert.ToBoolean(1) : Convert.ToBoolean(0) %>' and it ran!

但是,每个按钮都被禁用了。所以我尝试了:

Enabled='<%# Eval("wrqst_need_ind") == "Y" ? Convert.ToBoolean(1) : Convert.ToBoolean(1) %>'

然后每个按钮都被禁用。好像每次都返回false...为什么?

已解决:请参阅下面的解决方案!

【问题讨论】:

    标签: asp.net gridview dynamic button templatefield


    【解决方案1】:

    在 C# 中,三元语法是:

    Eval("wrqst_need_ind") == "Y" ? "TRUE" : "FALSE"
    

    如果您碰巧使用的是 VB.NET(看起来您不是),请使用 If 函数。

    If(Eval("wrqst_need_ind") == "Y", "TRUE", "FALSE")
    

    编辑:原来== 这里不会比较字符串内容,而是字符串对象。因此,您必须使用.Equals("Y")。因此,社区生成的最终答案是:

    Enabled='<%# Eval("wrqst_need_ind").Equals("Y") %>'
    

    【讨论】:

    • 我在将字符串转换为布尔值时出错...我正在尝试一些不同的变体,但我似乎无法理解...
    • 我的代码是: Enabled=''
    • 我认为您需要在“Eval”关键字之前留一个空格。另外,我不确定它是否区分大小写,但应该是“真”和“假”。
    • 仍然使用以下代码获取名称错误: Enabled='' # 和 Eval 之间有一个空格,我将 true 和 flase 设为小写?还有什么建议???谢谢!
    • 勾选这个作为答案,因为 ChessWhiz 应该获得荣誉。但是有一个小的技术性。您必须使用 .Equals,而不是 ==。我在答案中发布了该更改。
    【解决方案2】:

    这是有效的代码!

    Enabled='<%# Eval("wrqst_need_ind").ToString().Equals("Y".ToString()) ? Convert.ToBoolean(1) : Convert.ToBoolean(0) %>'
    

    【讨论】:

    • 虽然 Chris 指出这也有效: Enabled='' 请注意,您必须拥有 .Equals 否则它将返回每次都是假的。 (当然,除非对象实际上是相同的......但它们不是)
    • 我很难过你接受了你自己的答案,而实际上是我的答案为最初的“IIF”问题提供了解决方案。 :)
    • wtf...我也接受了您的答案... idk为什么它没有显示...我试图给您信任并让其他人知道对我有用的答案...
    • 哦,哈哈,你猜你不能选择多个答案作为“答案”......这有点傻,如果两个人一起给你正确的答案呢?无论如何,我检查了您的答案而不是我的答案...非常感谢您的帮助:)
    • 好吧,我评论了您对 .Equals 事物的回答,以便其他人看到它。太愚蠢了,我应该能够将两个答案标记为答案并将它们都显示在顶部,这样人们就可以首先看到正确的答案...
    【解决方案3】:

    我不确定您所做的所有“Convert.ToBoolean(1)”。如果您想要 true 和 false,只需写 true 和 false(不带引号,否则将被视为字符串)。

    例如。 Enabled='&lt;%#Eval("wrqst_need_ind") == "Y" ? true:false %&gt;'

    当然,当我键入时,我突然想到您不需要 使用这种运算符。无论如何,条件都返回真或假,因此上述简化为:

    Enabled='<%#Eval("wrqst_need_ind") == "Y" %>'
    

    【讨论】:

    • 你根本不使用 true 或 false 可能会奏效。但是,我尝试不使用引号,但出现了其他错误。我不记得前几天我尝试的错误是什么。但是,因为比较是在两个字符串之间进行的,所以必须使用等号,否则表达式将始终返回 false。
    【解决方案4】:

    我很确定正确的键是小写的“if”。

    【讨论】:

    • 他使用的是 VB,而不是 C# :) IIF = "当且仅当"
    • 我没有使用 vb。我正在使用 C#。或者至少这是我的意图。
    【解决方案5】:

    如果它会帮助其他人......

    这种风格适合我:

    (Eval("status").ToString()).Equals("Done")
    

    但这种风格确实有效:

    (Eval("status").ToString()).Contains("Done")
    

    【讨论】:

      猜你喜欢
      • 2021-12-13
      • 2020-09-11
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 1970-01-01
      相关资源
      最近更新 更多