0

在我的应用程序中,我必须像TextBox这样:FormViewLinqDataSource

<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”转换为十进制?我想做的是将所有这些无效值转换为空值。做这个的最好方式是什么?

4

2 回答 2

1

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

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

于 2008-09-13T21:46:57.300 回答
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);
}
于 2008-09-13T21:55:52.583 回答