usar que net mvc how example ejemplos como asp asp.net-mvc-3 viewbag

asp.net-mvc-3 - que - viewbag mvc 4 ejemplos



No se puede acceder a ViewBag en una vista parcial en ASP.NET MVC3 (6)

Tengo un controlador llamando a una vista. En la vista, hay una vista PartialView llamada be @Html.Partial("ViewName", model). Esto funciona bien

Pero en el controller quiero poner algo en la bolsa de vista lo que sería difícil de poner en el modelo de vista que paso a la vista. La vista principal no tiene problemas para acceder al ViewBag , pero en PartialView no devuelve nada.

¿Es posible usar el ViewBag en este caso o debería "piratear" esta información en el modelo que paso a la vista (y el modelo que paso al PartialView , y el modelo que paso al PartialView anidado en el primer PartialView )? ?


En un comentario TehOne dijo:

Sé que esto es un poco viejo, pero para referencia futura, resolví esto usando ViewContext.Controller.ViewBag.Property. Por supuesto, esto significa que la propiedad ViewBag a la que intenta acceder se configuró en el controlador, pero creo que es un caso bastante común.

Que es lo que funcionó para mí.


Eso debería funcionar sin ningún problema. En mi acción HomeController Index, agrego un mensaje al ViewBag:

ViewBag.Message = "Welcome to ASP.NET MVC!";

En la Vista de índice agrego la vista parcial:

@Html.Partial("ViewName")

Y en la vista parcial, presento el mensaje:

@ViewBag.Message

De los comentarios a continuación: parece haber un problema cuando pasa un modelo a la vista parcial. Luego puede consultar el ViewBag original con

@ViewContext.Controller.ViewBag.Message


Estaba teniendo el mismo problema con una página muy básica:

@Html.Partial("_AppIntro") <div class="form-group row"> <div class="col-md-10"> <a href="/Ag/Application/1" class="btn btn-default btn-primary">Next</a> </div> </div>

Y la vista parcial contenía solo texto con algunas referencias a ViewBag para recuperar algunos valores dinámicos pasados ​​desde el controlador. Resultó que el nombre de la vista parcial importaba. Quitando la página parcial y recreándola con Agregar -> Ver -> Vista de MVC 5 pero nombrando la página _AppIntro.cshtml se arregló.


Mi senario fue, tuve una visión parcial con el Modelo IEnumerable<SampleModel> Sin embargo, tuve que pasar el uso, porque Model.SampleModelList puede ser null

@Html.Partial("PartialViewName", Model.SampleModelList, new ViewDataDictionary())

La solución simple fue porque PartialView ahora también es parte de View. Todos los elementos en View se pueden acceder mediante PartialView, así que establecí los datos de ViewBag en data-element en View html, en lugar de ViewBag.

<div class="showcase-heading" id="dvValue" data-id="@Model.ContentId">@Model.Name</div>


Recientemente estaba experimentando el mismo problema, pero las respuestas aquí fueron solo soluciones provisionales, ya que proponen no usar la sobrecarga de Html.Partial usando viewData . Pero si tuviera que usar estas sobrecargas, creo que la respuesta correcta es:

@Html.Partial( "PartialViewName", model_object, new ViewDataDictionary() { { "Value1InViewBag", ViewBag.Value1InViewBag }, { "Value2InViewBag", ViewBag.Value2InViewBag } } )

Creo que esta respuesta se debe usar si necesita pasar diferentes ViewDataDictionary (por ejemplo, nosotros para cambiar HtmlFieldPrefix ) y porque en la vista usted debe saber qué vista parcial necesitará en ViewBag , por lo que no debería ser un problema nombrar todos los parámetros de ViewBag para ser copiados en el nuevo ViewBag utilizado en vista parcial (aparentemente ViewBag usa valores de ViewData ).


Si está utilizando una sobrecarga de Html.Partial() donde viewData es uno de los parámetros de entrada, por ejemplo:

@Html.Partial("PartialViewName", Model, new ViewDataDictionary(ViewBag))

luego su vista parcial no verá los datos de su ViewBag original.

Eliminar new ViewDataDictionary(ViewBag) , por lo que debe escribir

@Html.Partial("PartialViewName", Model)