将其他视图数据传递给强类型部分视图

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

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

我觉得这样应该行得通,不是吗?

ViewData["currentIndex"] = index;

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

将新内容添加到类中并在视图中返回它。

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

希望这有帮助。如果没有,然后让我知道,我会张贴具体代码。

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

渲染部分采用另一个参数,它只是一个 ViewDataDictionary:

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

注意,这将覆盖默认情况下所有其他视图都具有的默认 ViewData。如果要向 ViewData 添加任何内容,那么传递给部分视图的内容将不在这个新字典中。

为了扩展 Womp 发布的内容,如果你像下面这样使用 ViewDataDictionary的构造函数,你可以在保留现有视图数据的同时传递新的视图数据:

Html.RenderPartial(
"ProductImageForm",
image,
new ViewDataDictionary(this.ViewData) { { "index", index } }
);
@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" } });}

部分页(_ 标题) :

<div class="row titleBlock">
<h1>@ViewData["HeaderName"].ToString()</h1>
<h5>@ViewData["TitleName"].ToString()</h5>
</div>

可以使用动态变量 ViewBag

ViewBag.AnotherValue = valueToView;

这也应该有用。

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


Html.RenderPartial(
"ProductImageForm",
image,
this.ViewData
);

我知道这是一个老职位,但我偶然遇到了类似的问题时,使用核心3.0,希望它有所帮助的人。

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


<partial name="_Partial" for="PartialViewModel" view-data="ViewData" />