我有一个强类型的部分视图,它接受一个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++;
}
答案 0 :(得分:229)
RenderPartial采用另一个只是ViewDataDictionary的参数。你几乎就在那里,就这样称呼它:
Html.RenderPartial(
"ProductImageForm",
image,
new ViewDataDictionary { { "index", index } }
);
请注意,这将覆盖默认情况下所有其他视图都具有的默认ViewData。如果要向ViewData添加任何内容,它将不会出现在您传递到局部视图的新词典中。
答案 1 :(得分:151)
要扩展发布的内容,如果您使用ViewDataDictionary
的构造函数重载,那么可以传递新的视图数据,同时保留现有的视图数据:
Html.RenderPartial(
"ProductImageForm",
image,
new ViewDataDictionary(this.ViewData) { { "index", index } }
);
答案 2 :(得分:38)
@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>
答案 3 :(得分:8)
我认为这不行吗?
ViewData["currentIndex"] = index;
答案 4 :(得分:6)
创建另一个包含强类型类的类。
将新内容添加到课程中并在视图中返回。
然后在视图中,确保继承新类并更改现在将出错的代码位。即对你的领域的引用。
希望这会有所帮助。如果没有,请告诉我,我会发布具体的代码。
答案 5 :(得分:4)
传递其他数据的最简单方法是将数据添加到视图的现有ViewData中,如@Joel Martinez所述。但是,如果您不想污染ViewData,RenderPartial有一个方法,它接受三个参数以及您显示的双参数版本。第三个参数是ViewDataDictionary。您可以仅为您的部分构建一个单独的ViewDataDictionary,其中只包含您要传入的额外数据。
答案 6 :(得分:0)
您可以使用动态变量ViewBag
ViewBag.AnotherValue = valueToView;
答案 7 :(得分:0)
这也应该起作用。
this.ViewData.Add("index", index);
Html.RenderPartial(
"ProductImageForm",
image,
this.ViewData
);
答案 8 :(得分:0)
我知道这是一篇老文章,但是当我遇到使用Core 3.0的类似问题时,希望能对您有所帮助。
@{
Layout = null;
ViewData["SampleString"] = "some string need in the partial";
}
<partial name="_Partial" for="PartialViewModel" view-data="ViewData" />