J'ai une paire de vues dans mon application qui affichent le même modèle d'éditeur pour l'un de mes éléments de modèle; des deux vues ("Ajouter" et "Modifier"), "Modifier" fonctionne correctement, mais "Ajouter" renvoie null pour le modèle lorsque mon action de contrôleur gère la publication.ASP.NET MVC - La forme renvoie un modèle nul à moins que le modèle ne soit enveloppé dans un ViewModel personnalisé
Je trouve que si je donne le « Ajouter » voir une coutume ViewModel et appeler Html.EditorFor(p => p.PageContent)
plutôt que d'appeler simplement le EditorFor() sur l'ensemble du modèle object- Html.EditorFor(p => p)
, alors la forme renvoie le modèle correct, non nul, mais Cela génère d'autres problèmes liés à mes identifiants de script et de contrôle côté client (comme maintenant tous les champs sont préfixés avec "PageContent_"). J'utilise la même technique de modèle d'éditeur dans quelques endroits différents dans mon application et aucun des autres ne présente cette dépendance étrange sur un ViewModel.
Est-ce que quelqu'un d'autre a déjà rencontré des problèmes similaires?
Modifier Voir
<%@ 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 (travail)
[HttpPost, ValidateInput(false)]
public ActionResult EditContent(int id, FormCollection formCollection) {}
Ajouter Voir
<%@ 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 pleurer "dupliquer"
Cette question ne se rapporte à this one, mais cette question est destinée à cibler le problème spécifique que je suis expérience plutôt que la question plus générale posée là.
Essayez de supprimer le 'FormCollection'. Ce n'est pas nécessaire. –
Corrigez-moi si je me trompe mais n'avez-vous pas besoin du préfixe pour être là pour que le classeur par défaut fonctionne? Ou avez-vous oublié de définir l'attribut Bind sur un paramètre? – Min
@Daniel: J'utilise la fonction FormCollection pour vérifier si un bouton "Annuler" est cliqué, ainsi que des informations supplémentaires qui n'appartiennent pas au modèle. J'ai utilisé la même signature sur presque toutes les actions d'ajout/édition jusqu'ici sans faute. –