ASP.NET将无效字符串转换为空

时间:2008-09-13 21:35:17

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

在我的应用程序中,我TextBox FormView与[{1}}绑定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'转换为十进制?我希望它做的是将所有这些无效值转换为null。这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

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

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

对齐

答案 1 :(得分:1)

不熟悉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);
}