Modèle de liaison avec imbriqué des modèles enfants et PartialViews dans ASP.NET MVC
J'ai les types et les classes:
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 souhaite modifier le Page
exemple, dans mon Edit.aspx
Vue. 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.
Le rendu de la partie tout fonctionne bien, mais quand je post tout à l'intérieur de mon ContentEditor
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 le formulaire qui sont rendus par ContentEditor.ascx
ne pas obtenir le Content
préfixe à son id
attribut - valeurs ne sont pas liées à la Page
.
J'ai essayé d'utiliser faiblement typé aides à surmonter cette:
<%= Html.Hidden("Content.TemplateId", Model.TemplateId) %>
Et quand je fais face à un bien qui est un List<T>
de quelque chose, il devient très laid. J'ai ensuite rendu l'index de collection manuellement.
Dois-je mettre les deux Page et EditableContent en tant que paramètres à l'action du contrôleur?:
public ActionResult Edit(Page page, EditableContent content) { ... }
Ce qui me manque?
OriginalL'auteur MartinHN | 2010-03-17
Vous devez vous connecter pour publier un commentaire.
Je vous suggère d'utiliser le
EditorFor
helperModèle:
Views/Home/Index.aspx:
Views/Shared/EditorTemplates/EditableContent.ascx:
Et enfin Controller/contrôleur HomeController:
Je l'ai fait sur un projet de mine, mais pouvez-vous expliquer pourquoi
Html.RenderPartial("_blah" , Model.Blah)
ne fonctionne pas Darin? Comme c'est ce que nous avons déjà eu.il ne fonctionne pas parce que vous passez Modèle.Bla, donc à l'intérieur de l'partiel vous êtes dans le contexte de Bla, pas dans le contexte de Modèle => toutes les aides que vous utilisez dans cette partielle de générer des faux noms d'entrée. L'éditeur de modèles sont différents => ils prennent en compte le contexte parent et de générer des aides qui sont utilisés à l'intérieur d'eux va générer de l'entrée correcte des noms. Il suffit de regarder votre balisage et vous verrez immédiatement la différence. Pour le modèle par défaut classeur de travail, vous devez respecter les conventions.
OriginalL'auteur Darin Dimitrov