2012-06-22 39 views
5

Tengo un controlador llamando a una vista. En la vista hay una vista parcial, insertada así:No puedo acceder a ViewData en una vista parcial en ASP.NET MVC3

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

Esto funciona bien.

Pero en el controlador deseo poner algo en ViewData o ViewBag que usaré en la vista parcial. ¿Cómo puedo hacer esto?

+0

Desea utilizar ViewBag en su parcial o utilice ViewBag como modelo en su ¿parcial? –

+0

¿Por qué los datos que necesita consumir no están definidos en el modelo que está pasando a la vista parcial? (para eso es ese segundo parámetro, después de todo) –

+0

@Mateusz Rogulski Quiero obtener el valor de ViewBag en mi parcial – Victor

Respuesta

4

Tanto Html.Partial como Html.RenderPartial tienen una sobrecarga que acepta un ViewDataDictionary. Puede construir uno nuevo, o simplemente pasar el existente.

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

o

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

Estoy bastante seguro de ViewBag es accesible a su parcial sin la necesidad de pasar ningún parámetro.

EDIT:

ViewBag y ViewData son definitivamente disponible para ambos parciales y plantillas editor/visualización. Puede editarlos en su opinión antes de una vista subordinada accede a ellos de esta manera:

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

Luego, en el parcial:

@{ string myString = ViewBag.MyNewValue; } 
2

Usted puede hacerlo por el camino más simple.

Simplemente configure Viewbag.sth = value; en su controlador.

y en su uso parcial @ViewBag.sth

6

Usted debe ser capaz de hacer esto bien. Los datos Ver y Vista de bolsa están disponibles durante toda la vida del método de Acción por lo que si agrega un elemento para ver los datos en el método del controlador que obtiene la vista, los parciales posteriores que se representan en esa vista tendrán acceso a los datos de vista . La sintaxis para obtener un valor de los datos de vista en su vista parcial es muy fácil. Ejemplo:

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

Como los otros han dicho, el tiempo que se asigna el valor ViewBag en su método de acción, que debe ser capaz de acceder a él en su vista parcial.

Además, debe ser capaz de hacer que el bloque parcial de esta manera:

@Html.Partial("PartialViewName", Model) 

en lugar de esta

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