2017-09-29 3 views
0

J'ai un modèle principal et une vue partielle. Le modèle pour la vue partielle est un nouveau modèle sans valeurs. Mais maintenant je veux passer un élément du modèle parent à la vue partielle. Comment je vais y aller?Pour passer un élément du modèle parent à la vue partielle

Le parent et les vues partielles ont des propriétés différentes, donc je ne peux pas utiliser le même modèle.

Modèles:

public class Parent 
{ 
    . 
    . 
    public List<SelectListItem> TypeList { get; set; } 
    . 
    . 
} 

public class Partial1 
{ 
    public List<SelectListItem> TypeList1 { get; set; } 
    . 
    . 
} 
public class Partial2 
{ 
    public List<SelectListItem> TypeList2 { get; set; } 
    . 
    . 
} 

Parent Vue:

@model Models.Parent 

@Html.Partial("_Partial1", new Partial1()) 
@Html.Partial("_Partial2", new Partial2()) 

je me rends compte que je peux passer à la vue partielle en utilisant un ViewDataDictionary et de l'utiliser, mais je me demandais si je pouvais l'attribuer à mon modèle de vue partielle directement. Puis-je faire quelque chose comme ça?

@Html.Partial("_Partial1", new Partial1(new{TypeList1 =Model.TypeList})) 

Le code ci-dessus donne une erreur de compilation dire Partial1 ne contient pas un constructeur qui prend 1 argument.

EDIT 1:

Selon la réponse de Chris Pratt J'ai modifié mon code pour

@Html.Partial("_Partial1", new Partial1{TypeList1 =Model.TypeList}) 

Cette résolu la compilation error.But cela provoque maintenant une erreur de temps d'exécution dans la vue partielle 1.

Partial1 Vue:

@model Models.Partial1 
@Html.DropDownListFor(model => model.Type, Model.TypeList1, new { @class = "form-control" }) 

renvoie une erreur « Il n'y a pas Vi Elément ewData de type 'IEnumerable' avec la clé 'Type'. "

+0

Pourquoi ne pas avoir 2 propriétés 'List ' dans 'Partial1'? – adiga

+0

Oui, cela devrait fonctionner correctement. Quel est le problème réel ici? –

+0

@ChrisPratt Je reçois une erreur de compilation disant Partial1 ne contient pas un constructeur qui prend 1 argument. – TheFallenOne

Répondre

-1

essayez d'utiliser

@{ 
    Html.RenderPartial("Partial1", new { param1 = model.property }); 
} 

Le MSDN Link.

0

Oh désolé. Ce code semblait vraiment à première vue, mais maintenant je vois le problème. Vous essayez de transmettre l'information en tant qu'objet anonyme au constructeur, qui est sans paramètre. Au lieu de cela, vous devriez utiliser la syntaxe d'initialisation de l'objet:

new Partial1 { TypeList1 = Model.TypeList } 
+0

S'il vous plaît vérifier ma dernière édition. – TheFallenOne