J'essaie de savoir si je ne comprends pas quelque chose sur ASP.NET MVC ou si j'ai trouvé une sorte de bogue dans ASP.NET MVC Beta 3. J'ai un problème avec un PartialView ramasser le mauvais modèle lors de l'utilisation des extensions HTML HelperASP.NET MVC 3 et HTML Helper Extensions
Mon code de contrôleur ressemble à ceci:
public ActionResult EditGeneral(MapGeneralViewModel vm)
{
var query = MapGeneralViewModel.ToModel(vm, svcMaps);
return PartialView("General", MapGeneralViewModel.FromModel(query));
}
Dans le cas de ce qui est un insert, la propriété vm.Id commence comme -1 et après l'appel à MapGeneralViewModel.ToModel it a été persisté la base de données et query.Id a une valeur correcte.
L'appel à MapSettingsViewModel.FromModel renvoie un nouveau viewmodel et j'ai vérifié que la propriété Id correcte contient la valeur d'identification nouvellement créée.
Les bits pertinents du point de vue ressemblent:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<AdminWebRole.Models.Map.MapGeneralViewModel>" %>
<%: Model.Id %>
<%= Html.Hidden("IdTest", Model.Id) %>
<%= Html.HiddenFor(model => model.Id) %>
Si je mets un point d'arrêt dans la vue, Model.Id est correctement réglée à la bonne valeur.
La sortie réelle du régulateur (quand Model.Id == 70) ressemble à ceci:
70
<input id="IdTest" name="IdTest" type="hidden" value="-1" />
<input id="Id" name="Id" type="hidden" value="-1" />
Ainsi, la sortie de valeur sans utiliser les aides HTML est correct, mais la sortie des valeurs par la helpers est en quelque sorte ramasser le viewmodel qui a été transmis dans le contrôleur!
Je n'ai aucune idée de comment cela se passe. J'ai essayé différentes choses:
- Utilisation View() plutôt que PartialView()
- affectation des résultats de MapGeneralViewModel.FromModel() à vm et en faisant passer vm à la vue
- en utilisant <%: et <% =
- mise vm à null (l'ancien modèle de vue d'une certaine manière obtient encore utilisé)
- changer la valeur de l'identifiant entrant à 0 (résultats à 0 étant sortie dans la vue au lieu de -1)
- la problème n'est pas spécifique aux propriétés appelées "Id", j'ai également testé d'autres champs avec le même résultat
Suis-je confus sur la façon dont cela est censé fonctionner ou ai-je frappé un bêta bug? Si cela fait une différence, cela s'exécute dans mon environnement d'exécution Azure local sur une machine Win7 64 bits.
Il ne semble venir de la ModelState. En lisant cela, il me semble que je ne dois pas utiliser les HTML Helpers pour les propriétés du modèle qui ont changé depuis leur publication sur le contrôleur. Dans ce cas, ce sera juste la propriété Id. Cela a-t-il du sens ? – andynormancx
@andynormancx, ouais, les HtmlHelpers gourmands ModelState mordent tout le monde il semble. – jfar
Cela semble une façon très étrange de travailler. – andynormancx