Frage

In meiner Anwendung habe ich in einem TextBox FormView an einem LinqDataSource gebunden etwa so:

<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 innerhalb eines UpdatePanel so auf das Spielfeld jede Änderung sofort beibehalten wird. Außerdem ist der Wert von MyValue decimal?. Dies funktioniert gut, wenn ich nicht eine beliebige Zeichenfolge eingeben, die in das Feld nicht konvertiert werden können dezimal. In diesem Fall führt der UpdateItem Aufruf:

  

LinqDataSourceValidationException -   Fehlgeschlagen eine oder mehr Eigenschaften auf Typen MyType einzustellen. asdf ist kein gültiger Wert für Dezimal.

ich das Problem zu verstehen, ASP.NET weiß nicht, wie von ‚asdf‘ konvertieren dezimal zu ?. Was ich möchte, dass es zu tun ist, all diese ungültigen Werte konvertieren auf null. Was ist der beste Weg, dies zu tun?

War es hilfreich?

Lösung

Ich glaube, Sie sollten das Updating-Ereignis des LinqDataSource auf Ihrer Seite zu behandeln. Hat Ihre Prüfung für ungültige Zeichenfolge (mit einem TryParse Methode oder etwas) und dann weiter mit der Basisklasse zu aktualisieren.

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

Andere Tipps

Nicht mit ASP vertraut, aber in .net, konnte nicht einfach etwas tun, 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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top