有没有办法将一段额外数据和模型传递给部分视图?
E.G。
@Html.Partial("_SomeTable", (List<CustomTable>)ViewBag.Table);
我现在拥有的是什么。我可以在不改变模型的情况下添加其他内容吗?
@Html.Partial("_SomeTable", (List<CustomTable>)ViewBag.Table, "TemporaryTable");
我认为ViewDataDictionary是一个参数。我不确定这个对象是做什么的,或者这是否符合我的需要。
答案 0 :(得分:66)
ViewDataDictionary可用于替换部分视图中的ViewData字典...如果未传递ViewDataDictionary参数,则parial的viewdata与父元素相同。
如何在父母中使用它的一个例子是:
@Html.Partial("_SomeTable", (List<CustomTable>)ViewBag.Table, new ViewDataDictionary {{ "Key", obj }});
然后在部分内你可以按如下方式访问这个obj:
@{ var obj = ViewData["key"]; }
一种完全不同的方法是使用Tuple类将原始模型和额外数据组合在一起,如下所示:
@Html.Partial("_SomeTable", Tuple.Create<List<CustomTable>, string>((List<CustomTable>)ViewBag.Table, "Extra data"));
部分的模型类型将是:
@model Tuple<List<CustomTable>, string>
Model.Item1给出List对象,Model.Item2给出字符串
答案 1 :(得分:7)
您应该可以将它放在ViewBag中,然后在局部视图中从ViewBag访问它。 See this SO answer
答案 2 :(得分:6)
我也遇到过这个问题。我想要多次复制代码片段,并且不想复制粘贴。代码会略有不同。在查看其他答案之后,我不想走那条确切的路线,而是决定只使用普通的Dictionary
。
例如:
parent.cshtml
@{
var args = new Dictionary<string,string>();
args["redirectController"] = "Admin";
args["redirectAction"] = "User";
}
@Html.Partial("_childPartial",args)
_childPartial.cshtml
@model Dictionary<string,string>
<div>@Model["redirectController"]</div>
<div>@Model["redirectAction"]</div>
答案 3 :(得分:3)
你甚至可以聪明as shown here by Craig Stuntz
Html.RenderPartial("SomePartialView", null,
new ViewDataDictionary(new ViewDataDictionary() { {"SomeDisplayParameter", true }})
{ Model = MyModelObject });