2010-09-25 2 views
1

J'utilise une valeur d'identifiant que je transmets dans un champ masqué. Lorsque l'utilisateur soumet le formulaire, j'ai besoin du champ caché pour ma mise à jour. Après la mise à jour, une nouvelle valeur est placée dans le champ masqué du modèle et renvoyée à la vue. Ce qui semble si étrange, c'est que l'assistant utilise toujours la première valeur, jamais mise à jour. Par exemple, regardez ce qui suit de la vue:Html.Hidden génère des données incorrectes dans l'application MVC 2

<%: Html.Hidden("MyId",Model.MyId) %> 
<%: Model.MyId %> 

première fois en un coup d'oeil à la source dans les rendements du navigateur:

<input type="hidden" id="MyId" name="MyId" value="1" /> 
1 

** soumettre de nouveau au contrôleur et le modèle met à jour la propriété MyId à 2.

Retour au navigateur Je trouve maintenant:

<input type="hidden" id="MyId" name="MyId" value="1" /> 
2 

le même modèle p La propriété a des valeurs différentes! La méthode d'assistance est en quelque sorte en train de l'attraper à partir d'une instance de modèle précédente ou quelque chose?

Toute aide grandement appréciée sur ce que je ne comprends pas. BTW..get le même comportement avec Html.TextBox et Html.TextBoxFor.

Merci.

Répondre

7

Voilà comment les assistants HTML fonctionnent et c'est par conception. Lors de la liaison, ils vont d'abord regarder la valeur dans la requête GET/POST pour voir si la valeur est présente et ensuite dans le modèle. Si une valeur est trouvée dans la requête, ils ignoreront simplement la valeur que vous avez définie dans le modèle.

Normalement, vous n'êtes pas censé modifier les données envoyées dans la requête à l'intérieur de votre action de contrôleur. Mais si vous décidez de le faire, vous devrez soit rouler votre propre aide ou simplement:

<input type="hidden" name="MyId" value="<%= Model.MyId %>" /> 
+0

Je viens de passer 5 heures sur ce problème et la réponse de Darin m'a totalement aidé! – user52212

Questions connexes