ASP.NET MVC4 - 在多个方法中添加ViewBag?

时间:2014-01-28 10:43:35

标签: c# asp.net asp.net-mvc asp.net-mvc-4

假设我有一个带有返回PartialView的方法的控制器。如果我想将数据添加到ViewBag,那么这一切都必须在一个方法中吗?

例如:

public PartialViewResult GetPage()
{
   ViewBag.Example = "Here is some text.";
   AddMoreToViewBag();
   return PartialView();
}

private void AddMoreToViewBag()
{
   ViewBag.Example2 = "More text";
}

在上面的示例中,Example1和Example2是否可用于返回的PartialView?

3 个答案:

答案 0 :(得分:2)

  

在上面的示例中,Example1和Example2都可用   返回的PartialView?

是的,它可用。

答案 1 :(得分:1)

部分视图从父视图继承其ViewContext(包括Viewbag),所以是的,这将有效。

<强>修:

ViewBag附加到ControllerContext,它是控制器对象的一部分。这就是Action-method中可以访问的方式。因此,在同一个控制器中声明的任何其他方法也可以访问相同的ControllerContext,因此也可以访问相同的ViewBag。

所以你的AddMoreToViewBag()方法只要在同一个控制器中定义,或者是控制器继承的基本控制器就可以工作。

如果由于某种原因,您需要在控制器之外定义AddMoreToViewBag()(或它的基础),那么您需要将ViewContext作为参数传递给您的方法。

答案 2 :(得分:1)

ViewBag属于dynamic类型,但内部为System.Dynamic.ExpandoObject()

声明如下:

dynamic ViewBag = new System.Dynamic.ExpandoObject();

这就是你能做到的原因:

ViewBag.Example = "Here is some text.";

private void AddMoreToViewBag()
{
  ViewBag.Example2 = "More text";
}

两者均可在View中找到。