asp.net mvc - viewdatadictionary - Pasar ViewData a RenderPartial
viewdatadictionary partial view (4)
Estoy tratando de llamar a este método:
RenderPartialExtensions.RenderPartial Method (HtmlHelper, String, Object, ViewDataDictionary)
http://msdn.microsoft.com/en-us/library/dd470561.aspx
pero no veo ninguna forma de construir un ViewDataDictionary en una expresión, como:
<% Html.RenderPartial("BlogPost", Post, new { ForPrinting = True }) %>
¿Alguna idea de cómo hacer eso?
Esto funcionó para mí:
<% Html.RenderPartial("BlogPost", Model, new ViewDataDictionary{ {"ForPrinting", "true"} });%>
Esto no es exactamente lo que pidió, pero puede usar ViewContext.ViewBag.
// in the view add to the ViewBag:
ViewBag.SomeProperty = true;
...
Html.RenderPartial("~/Views/Shared/View1.cshtml");
// in partial view View1.cshtml then access the property via ViewContext:
@{
bool someProperty = ViewContext.ViewBag.SomeProperty;
}
He logrado hacer esto con el siguiente método de extensión:
public static void RenderPartialWithData(this HtmlHelper htmlHelper, string partialViewName, object model, object viewData) {
var viewDataDictionary = new ViewDataDictionary();
if (viewData != null) {
foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(viewData)) {
object val = prop.GetValue(viewData);
viewDataDictionary[prop.Name] = val;
}
}
htmlHelper.RenderPartial(partialViewName, model, viewDataDictionary);
}
llamándolo de esta manera:
<% Html.RenderPartialWithData("BlogPost", Post, new { ForPrinting = True }) %>
Tu puedes hacer:
new ViewDataDictionary(new { ForPrinting = True })
Como viewdatadictionary puede tomar un objeto para reflejar en su constructor.