我有一个控制器调用视图。在视图中有一个局部视图,插入如下:
@{ Html.RenderPartial("PartialViewName", this.Model);}
这工作正常。
但是在控制器中,我希望在 ViewData 或 ViewBag 中放置一些我将在局部视图中使用的东西。我怎样才能做到这一点?
我有一个控制器调用视图。在视图中有一个局部视图,插入如下:
@{ Html.RenderPartial("PartialViewName", this.Model);}
这工作正常。
但是在控制器中,我希望在 ViewData 或 ViewBag 中放置一些我将在局部视图中使用的东西。我怎样才能做到这一点?
你应该能够很好地做到这一点。View Bag 和 View Data 在 Action 方法的整个生命周期中都可用,因此如果您在获取视图的控制器方法中添加项目以查看数据,则在该视图上呈现的任何后续部分都可以访问视图数据. 从局部视图中的视图数据获取值的语法非常简单。例子:
@{
var variable = ViewData["My Key"];
}
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; }
正如其他人所说,只要您在操作方法中分配 ViewBag 值,您就应该能够在局部视图中访问它。
此外,您应该能够像这样渲染部分块:
@Html.Partial("PartialViewName", Model)
而不是这个
@{ Html.RenderPartial("PartialViewName", this.Model);}.
你可以用最简单的方法做到这一点。
只需Viewbag.sth = value;
在您的控制器中设置。
并在您的部分使用中@ViewBag.sth