ASP.NET Converte una stringa non valida in Null
-
09-06-2019 - |
Domanda
Nella mia domanda ho TextBox
in un FormView
vincolato ad a LinqDataSource
così:
<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);
}
Questo è all'interno di un UpdatePanel
quindi qualsiasi modifica al campo viene immediatamente mantenuta.Inoltre, il valore di MyValue
È decimal?
.Funziona bene a meno che non inserisco una stringa che non può essere convertita in decimale nel campo.In tal caso, il UpdateItem
la chiamata lancia:
LinqDataSourceValidationException - Impossibile impostare una o più proprietà su tipo myType.asdf non è un valore valido per Decimal.
Capisco il problema, ASP.NET non sa come convertire da "asdf" a decimale?.Quello che vorrei che facesse è convertire tutti questi valori non validi in null.Qual è il modo migliore per farlo?
Soluzione
Penso che dovresti gestire l'evento Updating di LinqDataSource sulla tua pagina.Controlla la presenza di stringhe non valide (usa un metodo TryParse o qualcosa del genere) e poi continua con l'aggiornamento della classe base.
(Modificare:La mia intuizione è in linea con ciò che è raccomandato Qui)
Altri suggerimenti
Non ho familiarità con ASP, ma in .net, non potresti semplicemente fare qualcosa sulla falsariga di
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);
}