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 });