vistas viewdatadictionary pass partialview parciales net mvc example asp asp.net-mvc renderpartial

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.