Asp.net mvc 3 Can';t在ASP.NET MVC3中以局部视图访问ViewData

Asp.net mvc 3 Can';t在ASP.NET MVC3中以局部视图访问ViewData,asp.net-mvc-3,partial-views,viewdata,Asp.net Mvc 3,Partial Views,Viewdata,我有一个控制器调用一个视图。视图中有一个局部视图,插入方式如下: @{ Html.RenderPartial("PartialViewName", this.Model);} @{ ViewBag.MyNewValue = "..."; } @Html.Partial("_MyPartial", Model) @Html.Partial("PartialViewName", Model) 这个很好用 但在控制器中,我希望在ViewData或ViewBag中放置一些我将在局部视图中使用的内

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

@{ Html.RenderPartial("PartialViewName", this.Model);} 
@{ ViewBag.MyNewValue = "..."; }
@Html.Partial("_MyPartial", Model)
@Html.Partial("PartialViewName", Model)
这个很好用


但在控制器中,我希望在ViewData或ViewBag中放置一些我将在局部视图中使用的内容。如何执行此操作?

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

@{ Html.RenderPartial("_MyPartial", Model.Property, new ViewDataDictionary { ... });}

我相当确定ViewBag对您的部分用户是可访问的,而无需传递任何参数

编辑:

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

@{ Html.RenderPartial("PartialViewName", this.Model);} 
@{ ViewBag.MyNewValue = "..."; }
@Html.Partial("_MyPartial", Model)
@Html.Partial("PartialViewName", Model)
然后在你的部分:

@{ string myString = ViewBag.MyNewValue; }

你可以用最简单的方法来做

只需设置
Viewbag.sth=value在控制器中


而在你部分使用
@ViewBag.sth

时,你应该可以很好地做到这一点。视图包和视图数据在操作方法的整个生命周期内都是可用的,因此,如果在获取视图的控制器方法中添加项以查看数据,则在该视图上呈现的任何后续分区都将可以访问视图数据。从局部视图中的视图数据获取值的语法非常简单。例如:

   @{
       var variable = ViewData["My Key"];
   }

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

此外,您应该能够如下方式渲染部分块:

@{ Html.RenderPartial("PartialViewName", this.Model);} 
@{ ViewBag.MyNewValue = "..."; }
@Html.Partial("_MyPartial", Model)
@Html.Partial("PartialViewName", Model)
而不是这个

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

您想在局部视图中使用ViewBag,或在局部视图中使用ViewBag作为模型?为什么您需要使用的数据没有在传递给局部视图的模型中定义?(这就是第二个参数的用途)@Mateusz Rogulski我想在我的partial@KirkWoll yes我想使用的数据没有在模型中定义它在控制器中的集合(要测试的变量…)