J'ai un modèle appelé Projet, qui a les propriétés suivantes (simplifié par souci de brièveté).MVC2 ModelBinder non lié à la propriété 'id' du modèle
[DataContract(IsReference = true)]
public class Project
{
[Key]
[DataMember]
public int id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public DateTime CreatedDate { get; set; }
}
Le modèle est aussi un DataContract pour un service WCF qui utilise Entity Framework 4 pour interroger un datastore. Le code du modèle est généré à partir d'un modèle qui génère automatiquement une couche de service CRUD par rapport au modèle Entity Framework. Maintenant, mon application MVC2 a une vue contenant un formulaire pour éditer les champs. L'action Editeurs du contrôleur accepte le modèle entier en tant qu'argument lors du POST.
[HttpPost]
public ActionResult Edit(Project project)
{
var context = new ServiceContext();
try
{
if (ModelState.IsValid)
{
project = context.UpdateProject(project);
return RedirectToAction("Index");
}
}
catch
{
ModelState.AddModelError("", "Could not save project");
}
return View(project);
}
Maintenant, mon problème est que lorsque le formulaire est affiché au contrôleur, le modèle du projet a tous ses champs peuplés correctement sauf pour la propriété « id », qui par défaut 0.
Je l'ai fait quelques recherches et supplié oncle Google pour trouver des réponses, mais le plus proche solution que je pouvais obtenir était d'ajouter ce qui suit à la classe du modèle,
[Bind(Include="id")]
qui fonctionne très bien, mais ne remplit que la propriété « id » , ce qui signifie que Je devrais spécifier explicitement chaque propriété à inclure dans la liaison du modèle. Évidemment, cela peut être méchant, d'autant plus que le modèle lui-même a beaucoup plus de propriétés que celui que j'ai montré ci-dessus.
Existe-t-il un autre moyen d'obtenir ce fonctionnement? L'intuition est que l'attribut [Key] a quelque chose à voir avec ça, mais je n'ai rien trouvé.
Le formulaire a une entrée masquée pour la propriété 'id'.
<%: Html.HiddenFor(model => model.id)%>
Merci, c'est déjà un champ caché sur le formulaire (j'ai oublié de le montrer sur ma question d'origine). Il ne fonctionne toujours pas ... – tobias86
en supprimant l'attribut [Clé] - est-ce que mvc poste ID dans viewmodel – swapneel
Non, il ne le fait pas. Mais cela m'a mis sur la bonne voie. Merci! Voir ma réponse ci-dessous – tobias86