有没有办法从控制器A调用控制器B返回ActionResult,同时向B提供特定模型?

Dej*_*jas 5 asp.net-mvc asp.net-mvc-3

假设我有一个控制器:

public BController : Controller
{
    public ActionResult Foo(FooViewModel vm)
    {
       ...
    }
 }
Run Code Online (Sandbox Code Playgroud)

同时我在另一个控制器AController中实现一个动作,我想渲染BController.Foo传递特定模型对象的结果.所以:

public AController : Controller
{
     public ActionResult Bar(BarViewModel vm)
     {
          FooViewModel fooVm = MakeFooVM(vm);
          return ... ; // pass fooVm to BController
     }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在MVC中实现这一目标?

WWC*_*WWC 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);
     }
}
Run Code Online (Sandbox Code Playgroud)

来源:获取另一个控制器动作的ActionResult?


Joh*_*ika 0

你可以这样做:

public AController : Controller
{
     public ActionResult Bar(BarViewModel vm)
     {
          FooViewModel fooVm = MakeFooVM(vm);
          var bController = new BController();
          return bController.Foo(fooVm);
     }
}
Run Code Online (Sandbox Code Playgroud)

  • 我想到了这一点,但我不确定在 MVC 中是否可以接受从框架“外部”实例化控制器。 (2认同)