je les types et les classes suivantes:modèle de liaison avec des modèles enfants imbriqués et PartialViews dans ASP.NET MVC
namespace MVC.Models
public class Page
{
public EditableContent Content {get; set; }
}
public class EditableContent
{
public TemplateSection SidebarLeft {get; set; }
public TemplateSection SidebarRight {get; set; }
}
Je veux modifier l'instance Page
dans mon Edit.aspx
View. Parce que EditableContent
est également attaché à d'autres modèles, j'ai un PartialView
appelé ContentEditor.ascx
qui est fortement typé et prend une instance de EditableContent
et le rend.
La partie de rendu fonctionne très bien, mais quand je publie - tout ce qui est à l'intérieur de mon n'est pas lié - ce qui signifie que Page.Content
est null
.
Sur le PartialView, j'utilise fortement typé Html Helpers pour ce faire:
<%= Html.HiddenFor(m => m.TemplateId) %>
Mais parce que les éléments d'entrée sur la forme qui sont rendus par ContentEditor.ascx
ne soit pas le préfixe Content
à son attribut id
- la les valeurs ne sont pas liées à Page
.
J'ai essayé d'utiliser des aides faiblement typé pour surmonter ceci:
<%= Html.Hidden("Content.TemplateId", Model.TemplateId) %>
Et quand je fais face à une propriété qui est un List<T>
de quelque chose il est très laid. Je dois ensuite rendre les index de collection manuellement.
Dois-je mettre à la fois la page et EditableContent en tant que paramètres à l'action du contrôleur ?:
public ActionResult Edit(Page page, EditableContent content) { ... }
Qu'est-ce que je manque?
Cela fonctionne, mec! Merci. Je suppose que le EditorFor prend soin de tous les échafaudages pour lier tout ensemble. – MartinHN
J'ai fait cela sur un de mes projets, mais pouvez-vous expliquer pourquoi 'Html.RenderPartial (" _blah ", Model.Blah)' ne fonctionne pas Darin? Comme c'est ce que nous avions précédemment. – GONeale
@GONeale, cela ne fonctionne pas parce que vous passez Model.Blah, donc à l'intérieur du partiel vous êtes dans le contexte de Blah, pas dans le contexte de Model => tous les helpers que vous utilisez dans ce partiel génèrent des noms faux. Les modèles d'éditeur sont différents => ils prennent en compte le contexte parent et génèrent des aides qui sont utilisées à l'intérieur de ceux-ci pour générer des noms d'entrée appropriés. Regardez simplement votre balisage et vous verrez immédiatement la différence. Pour que le classeur par défaut fonctionne, vous devez respecter les conventions. –