无法在ASP.NET MVC3的部分视图中访问ViewData

时间:2012-06-22 17:10:04

标签: asp.net-mvc-3 partial-views viewdata

我有一个控制器调用视图。在视图中有一个局部视图,插入如下:

@{ Html.RenderPartial("PartialViewName", this.Model);} 

这很好用。

但是在控制器中我希望在ViewData或ViewBag中添加一些我将在局部视图中使用的东西。我怎么能这样做?

4 个答案:

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