ASP.NET Convertir une chaîne invalide en null
-
09-06-2019 - |
Question
Dans ma candidature, j'ai TextBox
dans un FormView
lié à un LinqDataSource
ainsi:
<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);
}
C'est à l'intérieur d'un UpdatePanel
ainsi, toute modification apportée au champ est immédiatement conservée.Aussi, la valeur de MyValue
est decimal?
.Cela fonctionne bien, sauf si j'entre une chaîne qui ne peut pas être convertie en décimal dans le champ.Dans ce cas, le UpdateItem
lancers d'appel :
LinqDataSourceValidationException - Impossible de définir une ou plusieurs propriétés sur type myType.asdf n'est pas une valeur valide pour Decimal.
Je comprends le problème, ASP.NET ne sait pas comment convertir « asdf » en décimal ?.Ce que j'aimerais qu'il fasse, c'est convertir toutes ces valeurs invalides en null.Quelle est la meilleure façon de procéder?
La solution
Je pense que vous devriez gérer l'événement Updating de LinqDataSource sur votre page.Vérifiez les chaînes invalides (utilisez une méthode TryParse ou quelque chose du genre), puis poursuivez la mise à jour de la classe de base.
(Modifier:Mon intuition correspond à ce qui est recommandé ici)
Autres conseils
Je ne suis pas familier avec ASP, mais dans .net, ne pourriez-vous pas simplement faire quelque chose du genre
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);
}