ASP.NET MVC - Forme Renvoie la valeur Null Modèle, Sauf si le Modèle est Enveloppé dans une Coutume ViewModel

J'ai une paire de points de vue dans mon application qui à la fois d'afficher le même Éditeur de Modèle pour l'un de mes éléments de modèle; l'un des deux points de vue ("Ajouter", "Modifier"), "Modifier" fonctionne très bien, mais "Ajouter" est de retour null pour le modèle lors de mon action de contrôleur gère la poste.

J'ai trouvé que si je donne le "Ajouter" vue personnalisée ViewModel et appel Html.EditorFor(p => p.PageContent) plutôt que de simplement l'appel de la EditorFor() sur l'ensemble du Modèle objet- Html.EditorFor(p => p), puis le formulaire renvoie le bon, la non-null modèle, mais qui génère d'autres problèmes qui ont trait à mon script côté client et contrôle de l'IDs (comme aujourd'hui tous les champs sont préfixés par "PageContent_"). Je suis en utilisant le même Éditeur de Modèle technique à différents endroits tout au long de ma demande et qu'aucune des autres sont en présentant cette étrange dépendance sur un ViewModel.

Quelqu'un d'autre a déjà eu des problèmes similaires?

Modifier La Vue

<%@ Page Title="" Language="C#" MasterPageFile="~/Areas/Admin/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<PageContent>" %>

<% using (Html.BeginForm())
   { %>
<%=Html.Hidden("PageID", Model.Page.ID) %>
<%=Html.EditorFor(p => p)%>
<input type="submit" name="btnSave" value="Save" />
<input type="submit" name="btnCancel" value="Cancel" class="cancel" />
<% }

Action (De Travail)

[HttpPost, ValidateInput(false)]
public ActionResult EditContent(int id, FormCollection formCollection) {}

Ajouter Une Vue

<%@ Page Title="" Language="C#" MasterPageFile="~/Areas/Admin/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<PageContent>" %>

<% using (Html.BeginForm())
   { %>
<%=Html.Hidden("PageID", ViewData["PageID"]) %>
<%=Html.EditorFor(p => p)%>
<input type="submit" name="btnSave" value="Save" />
<input type="submit" name="btnCancel" value="Cancel" class="cancel" />
<% } %>

Action (À Défaut)

//content is ALWAYS null
[HttpPost, ValidateInput(false)]
public ActionResult AddContent(PageContent content, FormCollection formCollection) {}

Avant de crier "dupliquer"

Cette question ne se rapportent à l' cette une, mais cette question vise à cibler le problème spécifique que je suis en train de vivre plutôt que de la plus générale à la question posée.

Essayez de supprimer le FormCollection. Il n'est pas nécessaire.
Corrigez-moi si je me trompe, mais n'avez-vous pas besoin de le préfixe d'être là pour le classeur de modèles par défaut pour le travail? Ou avez-vous oubliez de définir l'attribut Bind sur un paramètre?
J'utilise le FormCollection pour vérifier un bouton "Annuler" étant un clic ainsi que quelques informations complémentaires qui tombe en dehors du modèle. J'ai été en utilisant la même signature sur à peu près tous les Ajouter/Modifier l'action de ce jour sans fail.
Je n'ai pas trouvé que c'était le cas auparavant car je ne suis pas à l'aide du préfixe sur certains de mes sous d'autres formes de travail sans problème.
Ce ne au contenu de la page? Si vous n'avez pas d'articles correspondants dans votre formulaire, il ne sera pas le modèle se lier à quoi que ce soit.

OriginalL'auteur Nathan Taylor | 2009-11-30