2012-06-22 9 views
5

Ho un controller che chiama una vista. Nella vista c'è una vista parziale, inserita in questo modo:Impossibile accedere a ViewData in una vista parziale in ASP.NET MVC3

@{ Html.RenderPartial("PartialViewName", this.Model);} 

Questo funziona correttamente.

Ma nel controller desidero inserire qualcosa nel ViewData o nel ViewBag che userò nella vista parziale. Come posso fare questo?

+0

Si desidera utilizzare ViewBag nel vostro parziale o utilizzare ViewBag come modello in vostro parziale? –

+0

Perché i dati che è necessario consumare non sono definiti nel modello che si sta passando alla vista parziale? (questo è il secondo parametro, dopotutto) –

+0

@Mateusz Rogulski Voglio ottenere il valore di ViewBag nel mio parziale – Victor

risposta

4

Sia Html.Partial che Html.RenderPartial hanno un sovraccarico che accetta ViewDataDictionary. Puoi costruirne uno nuovo o semplicemente passare quello esistente.

@{ Html.RenderPartial("_MyPartial", Model.Property, new ViewDataDictionary { ... });} 

o

@{ Html.RenderPartial("_MyPartial", Model.Property, ViewData);} 

Sono abbastanza certo ViewBag è accessibile al vostro parziale, senza la necessità di passare alcun parametro.

EDIT:

ViewBag e Viewdata sono sicuramente disponibili per entrambi i modelli partial e editore/visualizzazione. È possibile modificare a vostro parere prima di una vista subordinato vi accede in questo modo:

@{ ViewBag.MyNewValue = "..."; } 
@Html.Partial("_MyPartial", Model) 

Poi, nel tuo parziale:

@{ string myString = ViewBag.MyNewValue; } 
2

si può fare per la via più semplice.

Basta impostare Viewbag.sth = value; nel controller.

e nel vostro uso parziale @ViewBag.sth

6

Si dovrebbe essere in grado di farlo bene. Il View Bag e View Data sono disponibili durante l'intera vita del metodo Action, quindi se aggiungi un elemento per visualizzare i dati nel metodo del controller che ottiene la vista, i partial parziali successivi che sono renderizzati su quella vista avranno accesso ai dati della vista . La sintassi per ottenere un valore dai dati della vista nella tua vista parziale è molto semplice. Esempio:

@{ 
     var variable = ViewData["My Key"]; 
    } 
2

Come gli altri hanno detto, fino a quando si assegna il valore ViewBag nel vostro metodo di azione, si dovrebbe essere in grado di accedere nel vostro vista parziale.

Inoltre, si dovrebbe essere in grado di rendere il blocco parziale in questo modo:

@Html.Partial("PartialViewName", Model) 

invece di questo

@{ Html.RenderPartial("PartialViewName", this.Model);}. 
Problemi correlati