【问题标题】:ASP.NET Convert Invalid String to NullASP.NET 将无效字符串转换为 Null
【发布时间】:2010-09-08 19:42:42
【问题描述】:

在我的应用程序中,FormView 中的 TextBox 绑定到 LinqDataSource,如下所示:

<asp:TextBox ID="MyTextBox" runat="server" 
             Text='<%# Bind("MyValue") %>' AutoPostBack="True" 
             ontextchanged="MyTextBox_TextChanged" />

protected void MyTextBox_TextChanged(object sender, EventArgs e)
{
    MyFormView.UpdateItem(false);
}

这是在UpdatePanel 内,因此对该字段的任何更改都会立即保留。此外,MyValue 的值为decimal?。除非我在字段中输入任何无法转换为十进制的字符串,否则这很好用。在这种情况下,UpdateItem 调用会抛出:

LinqDataSourceValidationException - 未能在类型 MyType 上设置一个或多个属性。 asdf 不是 Decimal 的有效值。

我明白这个问题,ASP.NET 不知道如何将“asdf”转换为十进制?我想做的是将所有这些无效值转换为空值。最好的方法是什么?

【问题讨论】:

    标签: asp.net linq linq-to-sql validation data-binding


    【解决方案1】:

    我认为您应该在您的页面上处理 LinqDataSource 的更新事件。检查无效字符串(使用 TryParse 方法或其他方法),然后继续更新基类。

    (编辑:我的直觉与推荐的 here 一致)

    【讨论】:

      【解决方案2】:

      不熟悉 ASP,但是在 .net 中,你不能做一些类似的事情

      protected void MyTextBox_TextChanged(object sender, EventArgs e)
      { 
          Decimal d = null;
          TextBox tb = sender as TextBox;
      
          if(!Decimal.TryParse(tb.Text, out d))
          {
                  tb.Text = String.Empty;
          }
          MyFormView.UpdateItem(false);
      }
      

      【讨论】:

        猜你喜欢
        • 2012-04-12
        • 2011-07-20
        • 1970-01-01
        • 2010-09-09
        • 1970-01-01
        • 2022-01-08
        • 2020-06-20
        • 1970-01-01
        • 2023-03-22
        相关资源
        最近更新 更多