2008-12-03 8 views
0

tout le monde; J'ai ce problème dans asp.net, j'ai une page où j'insère et modifie des données, avant d'enregistrer je fais une validation si elle passe je sauvegarde les données mais sinon je lève une exception et la montre, la fonction va comme ceci;Exception gênante dans asp.net

protected void btnSave_Click(object sender, EventArgs e) 
{ 
try 
{ 
... 
if(ValidData()) 
    //Save 
    ... 
else 
    throw new Exception("Invalid data"); 
} 
catch(Exception ex) 
{ 
    // Javascript alert 
    JSLiteral.Text = Utilities.JSAlert(ex.Message); 
} 
} 

Le problème est que lorsque je lève l'exception et corriger les données dans la page que je clique à nouveau sur le bouton Enregistrer et sauve, mais avant qu'il me montre à nouveau le message d'exception et son ennuyeux. Même lorsque les données sont sauvegardées, je clique à nouveau et il affiche à nouveau le message de l'exception.

Connaissez-vous la réponse à ce problème?

+0

Qu'est-ce que JSLiteral? – JoshBerke

Répondre

1

Si JSLiteral est un contrôle côté serveur et qu'il utilise l'état d'affichage. Ensuite, vous devrez effacer l'état du contrôle, lorsque la sauvegarde est réussie.

Vous pouvez désactiver l'état d'affichage pour le contrôle comme JSLiteral.EnableViewState = false;

0

Le message est enregistré dans le viewstate du littéral?

définir explicitement le texte littéral à rien si les données sont valides.

1

Êtes-vous remettre à zéro la valeur de JSLiteral à vide après avoir enregistré?

1

Désactiver viewstate pour votre contrôle JSLiteral.

0

Mon estimation initiale est que ViewState se souvient du message d'erreur. Essayez de désactiver ViewState sur le contrôle JSLiteral.

0

Le lancement & attraper une exception dans la même fonction est fondamentalement inutile (les exceptions sont destinées à traverser les niveaux d'appel). Tout serait probablement mieux si vous l'écriviez comme:

if(ValidData()) 
{ 
    //Save 
} 
else 
{ // Javascript alert 
    JSLiteral.Text = Utilities.JSAlert(ex.Message); 
} 
+0

Ceci est vrai, mais pour répondre à la question, vous avez également besoin d'un JSLiteral.Text = "" là-dedans. – nickd

+0

De même, lorsqu'une exception provient de la base de données, elle doit être interceptée quelque part et le problème persiste. –