MVC3 - 将数据传递到模型之外的部分视图

时间:2011-08-24 14:27:42

标签: asp.net-mvc-3

有没有办法将一段额外数据和模型传递给部分视图?

E.G。

@Html.Partial("_SomeTable", (List<CustomTable>)ViewBag.Table);

我现在拥有的是什么。我可以在不改变模型的情况下添加其他内容吗?

@Html.Partial("_SomeTable", (List<CustomTable>)ViewBag.Table, "TemporaryTable");

我认为ViewDataDictionary是一个参数。我不确定这个对象是做什么的,或者这是否符合我的需要。

4 个答案:

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