17

我正在尝试调用此方法:

RenderPartialExtensions.RenderPartial Method (HtmlHelper, String, Object, ViewDataDictionary)

http://msdn.microsoft.com/en-us/library/dd470561.aspx

但我看不到在表达式中构造 ViewDataDictionary 的任何方法,例如:

<% Html.RenderPartial("BlogPost", Post, new { ForPrinting = True }) %>

任何想法如何做到这一点?

4

4 回答 4

27

这对我有用:

<% Html.RenderPartial("BlogPost", Model, new ViewDataDictionary{ {"ForPrinting", "true"} });%>
于 2010-11-04T08:53:34.800 回答
11

我已经设法使用以下扩展方法做到了这一点:

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);
}

这样称呼它:

<% Html.RenderPartialWithData("BlogPost", Post, new { ForPrinting = True }) %>
于 2010-01-22T15:05:22.757 回答
3

你可以做:

new ViewDataDictionary(new { ForPrinting = True })

由于 viewdatadictionary 可以在其构造函数中使用一个对象来反映。

于 2010-01-22T13:16:16.367 回答
0

这不完全符合您的要求,但您可以使用 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;
}
于 2013-06-11T06:19:21.210 回答