【问题标题】:error message "String was not recognized as a valid Boolean" in aspx pageaspx 页面中的错误消息“字符串未被识别为有效的布尔值”
【发布时间】:2013-11-27 16:08:33
【问题描述】:

我有一个 SQL 存储过程,我在其中基于另外两个列动态创建一个列(“Certified”)。此列的值为“0”或“1”。 SQL 存储过程查询是:

, CASE WHEN 
    (StartMiles < EndMiles) 
    AND (StartTime < EndTime) 
    AND (bcd.Status != 'C')
     THEN '1' ELSE '0' END
     AS Certified

在我的 aspx 页面的前端,我有一个 Telerik radgrid,它将显示一个复选框(如果值为 1,则启用,如果值为 0,则禁用)。 aspx代码为:

<telerik:GridTemplateColumn DataField="Certified" HeaderText="Certified" Visible="true">
    <ItemTemplate>
        <asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="true" 
        OnCheckedChanged="CheckBox2_CheckedChanged" 
        Enabled='<%# !bool.Parse(Eval("Certified").ToString()) %>' />
    </ItemTemplate>
</telerik:GridTemplateColumn>  

我在 aspx 页面上遇到错误字符串未被识别为有效的布尔值
要解决这个错误,如何在存储过程中设置数据类型?

【问题讨论】:

    标签: asp.net sql-server checkbox telerik radgrid


    【解决方案1】:
    <telerik:GridTemplateColumn DataField="Certified" HeaderText="Certified" Visible="true">
        <ItemTemplate>
            <asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="true" 
                OnCheckedChanged="CheckBox2_CheckedChanged" 
                Enabled='<%# !Convert.ToBoolean(Convert.ToInt32(Eval("Certified").ToString())) %>' />
        </ItemTemplate>
    </telerik:GridTemplateColumn>
    

    【讨论】:

    • 这很容易。谢谢。
    【解决方案2】:

    我建议使用代码隐藏方法来执行此操作,而不是通过嵌入式代码块将逻辑放入标记中,如下所示:

    标记:

    <telerik:GridTemplateColumn DataField="Certified" HeaderText="Certified" 
                                Visible="true">
        <ItemTemplate>
            <asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="true" 
                        OnCheckedChanged="CheckBox2_CheckedChanged" 
                        Enabled='<%# IsCertified(Eval("Certified").ToString()) %>' />
        </ItemTemplate>
    </telerik:GridTemplateColumn> 
    

    代码隐藏:

    protected bool IsCertified(string certifiedValue)
    {
        return !bool.Parse(certifiedValue);
    }
    

    注意:为了更安全,我建议使用Boolean.TryParse() 方法而不是仅使用Parse(),因为这将消除无法解析为bool 的字符串引发异常的可能性。阅读Boolean.TryParse Method documentation了解更多信息。

    在我看来,这提供了两个优于 OP 代码的优势:

    1. 简化标记,因为标记中没有条件逻辑,而现在只是对方法的调用。
    2. 您可以利用 Visual Studio 的 IntelliSense 编译器的强大功能,在编译时而不是在运行时和调试器本身捕获语法错误。

    【讨论】:

      猜你喜欢
      • 2012-03-22
      • 1970-01-01
      • 2016-09-13
      • 2022-01-25
      • 2017-01-03
      • 2017-03-13
      • 2017-02-21
      • 1970-01-01
      相关资源
      最近更新 更多