2009-05-31 8 views
2

Je comprends que les champs tels que Html.TextBox() acceptent deux valeurs, le premier étant le nom et le second étant la valeur. Et Html.TextArea() aussi. Mais dans le cas où le formulaire est soumis comme AJAX et le div où le formulaire est placé est remplacé par une vue du serveur, les champs de formulaire insistent pour prendre les valeurs précédentes. Une image vaut mille mots:D'où proviennent les champs de formulaire dans ASP.Net MVC?

image http://img132.imageshack.us/img132/4171/aspnetmvcbug.png

J'ai tout vérifié sur le contrôleur et le modèle et l'image est de mise au point de la vue elle-même. Le modèle est vide mais les champs générés à partir de celui-ci prennent la valeur de la soumission précédente.

Répondre

3

Les données de publication sont conservées dans ModelState. Les méthodes intégrées HtmlHelper recherchent les valeurs stockées dans l'état du modèle en fonction du nom de l'élément de formulaire lors du rendu de leur contenu.

+0

Oh! Donc, l'état du modèle est propre lorsque vous n'utilisez pas AJAX parce que je redirige. L'ajout d'un ModelState.Clear() lorsque la méthode est réussie le corrige. Est-ce le chemin à parcourir ou suis-je en train de détruire le ModelState? – Pablo

+0

Je suis à peu près sûr que ModelState.Clear() est utilisable - je l'utilise à quelques endroits dans mon code. Il effacera tous les messages de validation de ModelState ainsi que les valeurs de formulaire pré-postback mais tant que vous en êtes conscient, je pense qu'il n'y a vraiment aucun problème à l'utiliser. –

0

Avez-vous une entrée ViewData ["Body"]? MVC tentera également de lier un contrôle à un élément ViewData basé sur le nom.

+0

Il n'y a pas de corps dans ViewData. Merci. – Pablo

2

Vérifiez la propriété View.ModelState. Les formulaires peuvent saisir des valeurs à partir de là dans certaines circonstances.

+1

Oui, le problème était dans ModelState. Faire un ModelState.Clean() semble résoudre le problème, mais je ne suis pas sûr si je détruis le ModelState dans le processus. – Pablo

Questions connexes