5

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

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

这工作正常。

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

4

4 回答 4

6

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

   @{
       var variable = ViewData["My Key"];
   }
于 2012-06-22T17:24:16.103 回答
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; }
于 2012-06-22T17:17:42.273 回答
3

正如其他人所说,只要您在操作方法中分配 ViewBag 值,您就应该能够在局部视图中访问它。

此外,您应该能够像这样渲染部分块:

@Html.Partial("PartialViewName", Model)

而不是这个

@{ Html.RenderPartial("PartialViewName", this.Model);}.
于 2012-06-22T17:49:31.107 回答
2

你可以用最简单的方法做到这一点。

只需Viewbag.sth = value;在您的控制器中设置。

并在您的部分使用中@ViewBag.sth

于 2012-06-22T17:18:44.570 回答