在我的应用程序中,我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。这样做的最佳方式是什么?
答案 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);
}