假设我有一个控制器:
public BController : Controller
{
public ActionResult Foo(FooViewModel vm)
{
...
}
}
同时我在另一个控制器AController中实现一个动作,我想渲染BController.Foo传递特定模型对象的结果。所以:
public AController : Controller
{
public ActionResult Bar(BarViewModel vm)
{
FooViewModel fooVm = MakeFooVM(vm);
return ... ; // pass fooVm to BController
}
}
有没有办法在MVC中实现这一目标?
答案 0 :(得分:5)
在上面的答案中错过了一步。创建控制器后,需要设置ControllerContext,以便填充控制器的Request,Response和HttpContext。只是创建控制器将导致控制器的上下文设置为空值。
public AController : Controller
{
public ActionResult Bar(BarViewModel vm)
{
FooViewModel fooVm = MakeFooVM(vm);
var bController = new BController();
bController.ControllerContext = new ControllerContext(this.ControllerContext.RequestContext, bController);
return bController.Foo(fooVm);
}
}
答案 1 :(得分:0)
你可以这样做:
public AController : Controller
{
public ActionResult Bar(BarViewModel vm)
{
FooViewModel fooVm = MakeFooVM(vm);
var bController = new BController();
return bController.Foo(fooVm);
}
}
答案 2 :(得分:0)
请查看此网址,其中说明了从一个操作重定向到另一个操作时如何传递参数:http://jonkruger.com/blog/2009/04/06/aspnet-mvc-pass-parameters-when-redirecting-from-one-action-to-another/
希望这对你有所帮助。
答案 3 :(得分:0)
@WWC's answer的更新,有助于目标操作找到所需的视图。
public AController : Controller
{
public ActionResult Bar(BarViewModel vm)
{
FooViewModel fooVm = MakeFooVM(vm);
var bController = new BController();
var bControllerContext = new ControllerContext(this.ControllerContext.RequestContext, bController);
// update route so action can find the (partial)view
bControllerContext.RouteData.Values["controller"] = "B";
bController.ControllerContext = bControllerContext;
return bController.Foo(fooVm);
}
}