我有一个控制器调用视图。在视图中有一个局部视图,插入如下:
@{ Html.RenderPartial("PartialViewName", this.Model);}
这很好用。
但是在控制器中我希望在ViewData或ViewBag中添加一些我将在局部视图中使用的东西。我怎么能这样做?
答案 0 :(得分:6)
你应该可以做到这一点。 View Bag和View Data在Action方法的整个生命周期中都可用,因此如果您添加一个项目来查看获取视图的控制器方法中的数据,那么在该视图上呈现的任何后续部分都将有权访问视图数据。在部分视图中从视图数据获取值的语法非常简单。例如:
@{
var variable = ViewData["My Key"];
}
答案 1 :(得分:4)
Html.Partial和Html.RenderPartial都有一个接受ViewDataDictionary的重载。您可以构建一个新的,或者只是传递现有的。
@{ Html.RenderPartial("_MyPartial", Model.Property, new ViewDataDictionary { ... });}
或
@{ Html.RenderPartial("_MyPartial", Model.Property, ViewData);}
我相当肯定ViewBag可以被你的部分访问,而不需要传递任何参数。
修改
ViewBag和ViewData绝对可用于部分和编辑/显示模板。在从属视图访问它们之前,您可以在视图中编辑它们,如下所示:
@{ ViewBag.MyNewValue = "..."; }
@Html.Partial("_MyPartial", Model)
然后在你的部分:
@{ string myString = ViewBag.MyNewValue; }
答案 2 :(得分:2)
你可以用最简单的方式做到这一点。
只需在控制器中设置Viewbag.sth = value;
即可。
并部分使用@ViewBag.sth
答案 3 :(得分:2)
正如其他人所说,只要您在操作方法中指定ViewBag值,您就应该能够在局部视图中访问它。
此外,您应该能够像这样呈现部分块:
@Html.Partial("PartialViewName", Model)
而不是
@{ Html.RenderPartial("PartialViewName", this.Model);}.