2009-10-27 4 views
0

Est-il possible de désactiver un certain paramètre d'action de conserver sa valeur dans les requêtes?ASP.NET MVC Unbind Action Parameter

[HttpPost] 
public ActionResult MyAction(string value1, string value2) 
{ 
     if(value1=="hi") 
      ModelState.AddModelError("value1", "Can't have hi"); 
     //do stuff 
     if(ModelState.IsValid) 
      return RedirectToAction("Finish"); 
     else 
      return View() 
} 


[HttpGet] 
public ActionResult MyAction() 
{ 
     return View() 
} 

La vue est constituée d'une forme simple avec deux zones de saisie (valeur1 et valeur2). Une fois soumis et la validation échoue, la vue est renvoyée. Je veux toujours avoir la valeur de la zone de texte dans la vue pour être vide.

La valeur de la zone de texte "valeur1" est conservée si le modèle est invalidé.

J'ai essayé de déclarer la zone de texte comme <% = Html.TextBox ("value1", null)%> mais la valeur est toujours conservée. J'ai également essayé d'utiliser [Bind (Exclude = "value1")] mais cela ne fonctionne pas sur une seule variable.

Mise à jour 2:

Je fais cela pour une zone de texte qui est utilisé pour l'entrée Captcha (solution personnalisée). Je veux que la zone de texte soit effacée chaque fois que la page est chargée, mais je veux que la validation soit conservée.

Répondre

4

Essayez d'appeler

ModelState["value1"].Value 
    = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture); 

avant de retourner la vue à partir de votre action du contrôleur. Cela permet de conserver toutes les erreurs associées à la clé "valeur1", mais remplace la valeur par une valeur vide.

+0

Essayé cela, mais il semble supprimer toute validation effectuée contre la zone de texte. Donc dans l'exemple de ma question si je devais fournir "salut" dans la zone de texte pour "valeur1" la validation ne serait pas affichée. – Omar

+0

Mise à jour: Je le fais pour une zone de texte qui est utilisée pour l'entrée Captcha (solution personnalisée). Je souhaite que la zone de texte soit effacée à chaque fois que la page est chargée, mais je souhaite que la validation soit conservée. – Omar

+0

Ah, bon point. Pardon. J'ai mis à jour la réponse avec ce qui devrait fonctionner. – Haacked

2

Qu'est-ce que vous faites pour le conserver? Il n'y a rien de tel que ViewState dans MVC qui va conserver une valeur sur plusieurs requêtes, sauf si vous écrivez du code ou si vous utilisez des champs de formulaire pour le faire.

À quoi ressemble la vue? Cette méthode d'action est-elle appelée via GET ou POST? Quel est le "faire les choses" contenues dans votre méthode?

Editer: Vous continuez d'afficher des // choses dans votre exemple de code. Est-ce que ce contenu contient des références à ViewData? Votre question concerne la liaison, mais je ne vois aucune liaison. Peut-être que c'est au-delà de ma compréhension.

Édition 2: Glad Phil a vu ça! La question initiale n'a pas mentionné le ModelState.

+0

Désolé pour la question vague. J'étais debout tard dans la nuit et je ne savais pas à quel point c'était vague. – Omar

+0

La liaison de modèle Dosen't MVC stocke un dictionnaire de valeur de tentative? Je ne passe rien à la vue, c'est automatiquement fait. – Omar

+0

Vous ne savez pas pourquoi j'ai été abaissé pour essayer d'être utile. J'aurais dû avoir au moins le mérite d'avoir aidé le PO à modifier la question pour fournir l'information dont Phil avait besoin pour y répondre. – CoderDennis

Questions connexes