MVC3 – 将数据超出模型部分视图
有没有办法将一个额外的数据与模型一起传递给部分视图?
例如
@Html.Partial("_SomeTable", (List<CustomTable>)ViewBag.Table);
是我现在拥有的。 我可以添加别的东西而不改变我的模型?
@Html.Partial("_SomeTable", (List<CustomTable>)ViewBag.Table, "TemporaryTable");
我将ViewDataDictionary看作参数。 我不确定这个对象是做什么的,或者这是否符合我的需要。
可以使用ViewDataDictionary来replace部分视图中的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"));
部分的模型types将是:
@model Tuple<List<CustomTable>, string>
Model.Item1给出了List对象,Model.Item2给出了string
您应该能够将它放在ViewBag中,然后从部分视图中的ViewBag中访问它。 看到这个答案 。
我也遇到了这个问题。 我想要多次复制一段代码,而不想复制粘贴。 代码会略有不同。 看了其他的答案之后,我不想去那条确切的路线,而是决定只是使用一个普通的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>
如Craig Stuntz所示,你可以变得聪明起来
Html.RenderPartial("SomePartialView", null, new ViewDataDictionary(new ViewDataDictionary() { {"SomeDisplayParameter", true }}) { Model = MyModelObject });