184

我有一个采用 ProductImage 的强类型部分视图,当它被渲染时,我还想为它提供一些我在包含页面中动态创建的额外 ViewData。如何通过 RenderPartial 调用将我的强类型对象和自定义 ViewData 都传递给局部视图?

var index = 0;
foreach (var image in Model.Images.OrderBy(p => p.Order))
{
  Html.RenderPartial("ProductImageForm", image); // < Pass 'index' to partial
  index++;
}
4

9 回答 9

262

RenderPartial 采用另一个参数,它只是一个 ViewDataDictionary。你快到了,就这样称呼它:

Html.RenderPartial(
      "ProductImageForm", 
       image, 
       new ViewDataDictionary { { "index", index } }
); 

请注意,这将覆盖所有其他视图默认具有的默认 ViewData。如果您要向 ViewData 添加任何内容,则它不会在您传递给局部视图的这个新字典中。

于 2009-07-23T02:22:59.670 回答
173

要扩展 womp 发布的内容,如果您使用类似的构造函数重载,则可以在保留现有视图数据的同时传递新的视图数据ViewDataDictionary

Html.RenderPartial(
      "ProductImageForm", 
       image, 
       new ViewDataDictionary(this.ViewData) { { "index", index } }
); 
于 2012-05-11T22:00:28.617 回答
49
@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" } });}

部分页面(_Header):

<div class="row titleBlock">
    <h1>@ViewData["HeaderName"].ToString()</h1>
    <h5>@ViewData["TitleName"].ToString()</h5>
</div>
于 2014-08-12T08:27:59.190 回答
11

我认为这应该工作不?

ViewData["currentIndex"] = index;
于 2009-07-23T01:56:29.490 回答
6

创建另一个包含强类型类的类。

将您的新内容添加到类中并将其返回到视图中。

然后在视图中,确保您继承您的新类并更改现在将出错的代码位。即对您的字段的引用。

希望这可以帮助。如果没有,请告诉我,我将发布特定代码。

于 2009-07-23T01:57:27.057 回答
5

我知道这是一篇旧帖子,但是当我遇到使用 core 3.0 的类似问题时,我遇到了它,希望它对某人有所帮助。

@{
Layout = null;
ViewData["SampleString"] = "some string need in the partial";
}

<partial name="_Partial" for="PartialViewModel" view-data="ViewData" />
于 2019-12-18T21:08:14.550 回答
4

正如@Joel Martinez 所说,传递额外数据的最简单方法是将数据添加到视图的现有 ViewData 中。但是,如果您不想污染您的 ViewData,RenderPartial 有一个方法,它接受三个参数以及您显示的两个参数版本。第三个参数是 ViewDataDictionary。您可以为仅包含您要传入的额外数据的部分构造一个单独的 ViewDataDictionary。

于 2009-07-23T02:21:38.567 回答
3

这也应该有效。

this.ViewData.Add("index", index);

Html.RenderPartial(
      "ProductImageForm", 
       image, 
       this.ViewData
); 
于 2018-11-10T07:59:41.803 回答
0

您可以使用动态变量 ViewBag

ViewBag.AnotherValue = valueToView;
于 2015-12-02T16:18:29.073 回答