2010-05-05 4 views
9

J'ai une vue qui est pas fortement typée. Cependant, j'ai dans cette vue une vue partielle fortement typée.Comment passer Modèle d'une vue à une vue partielle?

Comment faire pour passer le modèle à cette vue fortement typée?

J'ai essayé quelque chose comme

public ActionResult Test() 
     { 
       MyData = new Data(); 
       MyData.One = 1; 
       return View("Test",MyData) 
     } 

Dans mon TestView

<% Html.RenderPartial("PartialView",Model); %> 

Cela me donne une exception StackOverflow. Donc, je ne suis pas sûr de savoir comment le transmettre. Bien sûr, je ne veux pas que la vue de test soit fortement typée si possible car ce qui se passe si j'avais comme 10 vues partielles fortement typées dans cette vue, j'aurais besoin d'une sorte de wrapper.

+0

Losely tapé à droite sur l'emballage, et ce ne est pas une mauvaise façon de faire – hunter

Répondre

4

Vous devez étendre votre modèle afin qu'il puisse fournir tous les champs nécessaires pour la vue (cela s'appelle ViewModel) ou vous les fournissez séparément avec ViewData.

public ActionResult Test() 
     { 
       MyData = new Data(); 
       MyData.One = 1; 
       ViewData["someData"]=MyData; 
       return View(); 
     } 

alors:

<% Html.RenderPartial("PartialView",ViewData["someData"]); %> 

ViewData est un beau dictionnaire vous

+0

Ensuite, je devrais le jeter dans la vue partielle droite? – chobo2

+1

Que voulez-vous dire? Si votre vue partielle est fortement typée avec la classe MyData, la ligne ci-dessus rendra votre vue sans problème. Comme vous pouvez le voir, vous envoyez plus d'un modèle à votre vue par ViewData car il n'est pas fortement typé, alors vous tirez vos modèles pour chaque PartialView fortement typé. –

+0

J'ai essayé ceci mais ne fonctionne pas pour moi donc j'ai essayé @ Html.Partial et a trouvé que cela fonctionne pour moi. Je ne sais pas pourquoi c'est comme ça. – lawphotog

0

Mettez l'objet requis par le partial dans Viewdata et utilisez ist dans la vue comme entrée pour le partial.

public ActionResult Test() 
     { 
       ViewData["DataForPartial"] = new PartialDataObject(); 
       return View("Test") 
     } 

Dans l'utilisation de la vue:

<% Html.RenderPartial("PartialView",ViewData["DataForPartial"]); %> 

Mais de toute façon: Il n'y a aucune raison d'avoir pas une vue stronly typée.

+0

Le problème est pas être le vue étant une vue fortement typée est le fait que si vous avez plus d'une vue partielle dans cette vue, vous ne pouvez pas en faire une vue fortement typée pour s'adapter à tous ces cas sauf si vous faites une sorte de wrapper ou j'utilise ViewData. – chobo2

Questions connexes