Nex*_*tep 32 viewbag asp.net-mvc-3 child-actions
我对此感到困惑:我有一个动作,比如说Parent,在相应的视图文件中,我调用了一个子动作,比如Child,父动作和子动作都在同一个控制器中.
我需要Child动作和Parent动作来共享ViewBag.Now中的一些数据,我应该怎么做?这是我的问题:
当我在父视图文件中调用Child动作时,我将viewbag传递给它:@ Html.Action(ViewBag).在我的孩子行动中,我这样做:
public PartialViewResult Child(Object ViewBag)
{
//using the data in ViewBag
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?viewbag对象是通过引用传递的还是与原始viewbag不同的对象(需要更多内存)?
或者,如果Child操作默认情况下与其调用父Action共享viewbag?
从Darin Dimitrov的回答中,我知道我做不到这样的事情:@ Html.Action(ViewBag)
但我真的需要通过子动作多参数,我该怎么办?
Dar*_*rov 42
子操作遵循与父操作不同的控制器/模型/视图生命周期.因此,他们不共享ViewData/ViewBag.如果要将参数传递给父级的子操作,可以执行以下操作:
@Html.Action("Child", new { message = ViewBag.Message })
Run Code Online (Sandbox Code Playgroud)
在儿童行动中:
public ActionResult Child(string message)
{
...
}
Run Code Online (Sandbox Code Playgroud)
mit*_*its 14
有一种方法,但您必须创建一个自定义抽象类作为剃刀视图的基类.然后将您需要的任何内容从父动作暴露给子动作.这是我从继承自WebViewPage的类中获取根控制器的ViewBag的方法
private dynamic GetPageViewBag()
{
if (Html == null || Html.ViewContext == null) //this means that the page is root or parial view
{
return ViewBag;
}
ControllerBase controller = Html.ViewContext.Controller;
while (controller.ControllerContext.IsChildAction) //traverse hierachy to get root controller
{
controller = controller.ControllerContext.ParentActionViewContext.Controller;
}
return controller.ViewBag;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27122 次 |
| 最近记录: |