Comment passer du modèle à vue partielle
J'ai deux modèles de vue:
public class ParentViewModel
{
public Id { get; set; }
.....
public ChildViewModel Child{ get; set; }
}
public class ChildViewModel
{
public ChildId { get; set; }
.....
}
Contrôleurs:
public ActionResult Index()
{
.... <some code>
return View("NewIndex", ParentViewModel);
}
[HttpPost]
public ActionResult PartialAction(ChildViewModel childView)
{
return RedirectToAction("Index");
}
Et points de vue:
L'indice de
@model ParentViewModel
....
@Html.Partial("_Partial", Model.Child)
et _Partial
@model ChildViewModel
... do some stuff with child model
Lorsque j'essaie d'ouvrir la page Index j'ai une erreur:
L'élément de modèle adopté dans le dictionnaire est de type 'ParentViewModel", mais ce dictionnaire nécessite un élément de modèle de type "ChildViewModel'.
Pourquoi il essaie de passer ParentViewModel au lieu de ChildViewModel. Ce que je fais mal?
- Lors de l'appel est
Model.Child
null? Parce que le deuxième parater de laHtml.Partial
ne doit pas êtrenull
... Donc, assurez-vous que votreChild
propriété a une certaine valeur! - en fait, ma vue Partielle n'est que pour AddObject fonctionnalité, donc ChildViewModel besoins uniquement pour l'envoi de données de contrôleur de PartialView. Donc, ne noot besoin de passer des données à l'Enfant à partir de l'Index à vue Partielle
- Encore besoin de vous pour passer un ChildViewModel à la
@Html.Partial
appel. Toutefois, il peut être un objet vide :@Html.Partial("_Partial", new ChildViewModel ())
... - Oh! Merci! Maintenant je comprendre 🙂
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème que l'OP. À partir de l'un des commentaires, j'ai réalisé que le deuxième paramètre ne doit pas être nulle, j'.e de
Si Le Modèle.L'enfant est null, alors Modèle est passé à la place de Modèle.Enfant. Si il y a des cas quand le deuxième paramètre est null, alors vous allez avoir à consulter d'abord votre code et peut-être passer un initialisé Enfant comme second paramètre. Quelque chose comme ceci
@Html.Partial("_Partial", Model.Child ?? new Child())
?La réponse est qu'il faut passer d'un objet vide Partiel, comme
Vous pouviez retourner
PartialView("...")
à partir d'unController
au lieu de cela, et appel à l'action à partir de la vue Index.Contrôleurs:
Et Index
Sinon, vous pouvez initialiser ParentViewModel dans le
Index()
public ActionResult Index()