0

私のアプリケーションではTextBox、次のようにFormViewバインドされています。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?。10 進数に変換できない文字列をフィールドに入力しない限り、これは正常に機能します。その場合、UpdateItem呼び出しは次をスローします。

LinqDataSourceValidationException - タイプ MyType で 1 つ以上のプロパティを設定できませんでした。asdf は Decimal の有効な値ではありません。

私は問題を理解しています.ASP.NETは「asdf」から10進数への変換方法を知りません. 私がやりたいことは、これらの無効な値をすべて null に変換することです。これを行う最善の方法は何ですか?

4

2 に答える 2

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 に答える
1

ページで LinqDataSource の Updating イベントを処理する必要があると思います。無効な文字列をチェックして (TryParse メソッドなどを使用)、基本クラスの更新を続行します。

(編集:私の直感は、ここで推奨されているものと一致しています)

于 2008-09-13T21:46:57.300 に答える