2008-09-13 5 views
0

Dans ma demande je TextBox dans un FormView lié à un LinqDataSource comme ceci:ASP.NET Convertir non valide Chaîne à Null

<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 de sorte que toute modification du champ persistée immédiatement. En outre, la valeur de MyValue est decimal?. Cela fonctionne bien à moins que j'entre une chaîne qui ne peut pas être convertie en décimal dans le champ. Dans ce cas, l'appel UpdateItem lance:

LinqDataSourceValidationException - Impossible de définir une ou plusieurs propriétés sur le 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 je voudrais faire, c'est convertir toutes ces valeurs invalides en null. Quelle est la meilleure façon de procéder?

Répondre

1

Je pense que vous devriez gérer l'événement Updating de LinqDataSource sur votre page. Faites votre vérification des chaînes invalides (utilisez une méthode TryParse ou quelque chose) et continuez avec la mise à jour de la classe de base.

(Modifier: Mon intuition aligne avec ce qui est recommandé here)

1

Vous n'êtes pas familier avec ASP, mais en .net, ne pourriez-vous faire quelque chose le long des lignes de

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); 
}