2008-09-13 8 views
0

In meiner Anwendung auf Null Ich habe TextBox in einem FormView zu einem LinqDataSource wie so gebunden:ASP.NET konvertieren Ungültige String

<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); 
} 

Dies ist im Inneren ein UpdatePanel so eine Änderung auf das Feld beibehalten wird sofort. Außerdem ist der Wert MyValuedecimal?. Dies funktioniert einwandfrei, es sei denn, ich gebe eine Zeichenfolge ein, die nicht in das Feld Dezimal konvertiert werden kann. In diesem Fall führt der UpdateItem Aufruf:

LinqDataSourceValidationException - eines setzen fehlgeschlagen oder mehr Eigenschaften auf Typen MyType. asdf ist kein gültiger Wert für Dezimal.

Ich verstehe das Problem, ASP.NET weiß nicht, wie von 'Asdf' in Dezimal konvertieren ?. Was ich möchte, ist, all diese ungültigen Werte in null zu konvertieren. Was ist der beste Weg, dies zu tun?

Antwort

1

Ich denke, Sie sollten das Update-Ereignis der LinqDataSource auf Ihrer Seite behandeln. Suchen Sie nach ungültigen Zeichenfolgen (verwenden Sie eine TryParse-Methode oder etwas), und fahren Sie dann mit dem Basisklassenupdate fort.

(Edit: Meine Intuition Linien mit dem, was here empfohlen wird)

1

nicht mit ASP vertraut, aber in .net, konnte nicht einfach tun etwas entlang der Linien von

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); 
}