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?

Était-ce utile?

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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top