c# - multiples - llamar una vista parcial mvc
Pase ViewData adicional a una vista parcial fuertemente tipada (7)
Crea otra clase que contenga tu clase fuertemente tipada.
Agregue sus cosas nuevas a la clase y regréselo en la vista.
Luego, en la vista, asegúrese de heredar su nueva clase y cambie los bits de código que ahora estarán en error. a saber, las referencias a sus campos.
Espero que esto ayude. Si no, avíseme y publicaré un código específico.
Tengo una vista parcial fuertemente tipada que toma una ProductImage y, cuando se representa, también me gustaría proporcionarle algunos ViewData adicionales que creo dinámicamente en la página que los contiene. ¿Cómo puedo pasar tanto mi objeto fuertemente tipado como mi ViewData personalizado a la vista parcial con la llamada RenderPartial?
var index = 0;
foreach (var image in Model.Images.OrderBy(p => p.Order))
{
Html.RenderPartial("ProductImageForm", image); // < Pass ''index'' to partial
index++;
}
Creo que esto debería funcionar, ¿no?
ViewData["currentIndex"] = index;
La manera más fácil de pasar datos adicionales es agregar los datos a los ViewData existentes para la vista como señala @Joel Martinez. Sin embargo, si no quiere contaminar su ViewData, RenderPartial tiene un método que toma tres argumentos, así como la versión de dos argumentos que muestra. El tercer argumento es un ViewDataDictionary. Puede construir un ViewDataDictionary separado solo para su parcial que contiene solo los datos adicionales que desea pasar.
Para ampliar lo que ha publicado womp, puede pasar nuevos datos de visualización conservando los datos de visualización existentes si utiliza la sobrecarga del constructor de ViewDataDictionary
manera:
Html.RenderPartial(
"ProductImageForm",
image,
new ViewDataDictionary(this.ViewData) { { "index", index } }
);
Puede usar la variable dinámica ViewBag
ViewBag.AnotherValue = valueToView;
RenderPartial toma otro parámetro que es simplemente un ViewDataDictionary. Ya casi estás allí, solo llámalo así:
Html.RenderPartial(
"ProductImageForm",
image,
new ViewDataDictionary { { "index", index } }
);
Tenga en cuenta que esto anulará el ViewData predeterminado que todas sus otras Vistas tienen de forma predeterminada. Si está agregando algo a ViewData, no estará en este nuevo diccionario que está pasando a su vista parcial.
@Html.Partial("_Header", new ViewDataDictionary { { "HeaderName", "User Management" }, { "TitleName", "List Of Users" } })
or
@{Html.RenderPartial("_Header", new ViewDataDictionary { { "HeaderName", "User Management" }, { "TitleName", "List Of Users" } });}
Página parcial (_Header):
<div class="row titleBlock">
<h1>@ViewData["HeaderName"].ToString()</h1>
<h5>@ViewData["TitleName"].ToString()</h5>
</div>