假设我有一个带有返回PartialView的方法的控制器。如果我想将数据添加到ViewBag,那么这一切都必须在一个方法中吗?
例如:
public PartialViewResult GetPage()
{
ViewBag.Example = "Here is some text.";
AddMoreToViewBag();
return PartialView();
}
private void AddMoreToViewBag()
{
ViewBag.Example2 = "More text";
}
在上面的示例中,Example1和Example2是否可用于返回的PartialView?
答案 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
中找到。