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

Vic*_*tor 5 viewdata partial-views asp.net-mvc-3

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

@{ Html.RenderPartial("PartialViewName", this.Model);} 
Run Code Online (Sandbox Code Playgroud)

这很好用.

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

Mat*_*old 6

你应该能够做到这一点.View Bag和View Data在Action方法的整个生命周期中都可用,因此如果您添加一个项目来查看获取视图的控制器方法中的数据,那么在该视图上呈现的任何后续部分都将有权访问视图数据.在部分视图中从视图数据获取值的语法非常简单.例:

   @{
       var variable = ViewData["My Key"];
   }
Run Code Online (Sandbox Code Playgroud)


Pan*_*ait 4

Html.Partial 和 Html.RenderPartial 都有一个接受 ViewDataDictionary 的重载。您可以构建一个新的,或者简单地传递现有的。

@{ Html.RenderPartial("_MyPartial", Model.Property, new ViewDataDictionary { ... });}
Run Code Online (Sandbox Code Playgroud)

或者

@{ Html.RenderPartial("_MyPartial", Model.Property, ViewData);}
Run Code Online (Sandbox Code Playgroud)

我相当确定 ViewBag 可以被您的部分访问,而无需传递任何参数。

编辑:

ViewBag 和 ViewData 绝对可用于部分模板和编辑器/显示模板。您可以在从属视图访问它们之前在视图中编辑它们,如下所示:

@{ ViewBag.MyNewValue = "..."; }
@Html.Partial("_MyPartial", Model)
Run Code Online (Sandbox Code Playgroud)

然后在你的部分:

@{ string myString = ViewBag.MyNewValue; }
Run Code Online (Sandbox Code Playgroud)