49 votes

Caché pour ne pas obtenir la valeur correcte du modèle de vue

J'ai un multi-étape de fichier de processus d'importation. J'ai une forme cachée d'entrée de mon point de vue que je suis en train de remplir avec de la "CurrentStep" dans le modèle de vue.

<% = Html.HiddenFor(model => model.CurrentStep) %>

CurrentStep est un Enum et j'ai toujours la valeur par défaut plutôt que celui que j'ai fourni pour le modèle de vue. d'un autre côté cela me met la valeur correcte:

<p><% = Model.CurrentStep %></p>

Je me rends compte que je pouvais juste la main de code caché d'entrée, mais je veux savoir: ce que je fais mal? Est-il un meilleur moyen de garder une trace de l'étape en cours entre les Poteaux?

Merci à l'avance.

77voto

Darin Dimitrov Points 528142

Ce que vous faites mal, c'est que vous essayez de modifier la valeur d'un Posté variable dans votre contrôleur de l'action. Donc je suppose que vous essayez de faire ceci:

[HttpPost]
public ActionResult Foo(SomeModel model)
{
    model.CurrentStep = Steps.SomeNewValue;
    return View(model);
}

et html helpers comme HiddenFor toujours utiliser l'affiche de la valeur et après que la valeur dans le modèle.

Donc, vous avez deux possibilités:

  1. Supprimer la valeur de la modelstate:

    [HttpPost]
    public ActionResult Foo(SomeModel model)
    {
        ModelState.Remove("CurrentStep");            
        model.CurrentStep = Steps.SomeNewValue;
        return View(model);
    }
    
  2. Générer manuellement le champ caché

    <input type="hidden" name="NextStep" value="<%= Model.CurrentStep %>" />
    
  3. Écrire un helper personnalisé qui va utiliser la valeur de votre modèle et non pas celui qui est Affiché

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X