ASP.NET konvertieren Ungültige String auf Null
-
09-06-2019 - |
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?
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);
}