如何在Mvc的控制器中调用另一个控制器的动作

我需要从控制器A调用控制器B的动作FileUploadMsgView,并需要为它传递一个参数。

 Code---its not going to the controller B's FileUploadMsgView().
    In ControllerA
  private void Test()
    {

        try
        {//some codes here
            ViewBag.FileUploadMsg = "File uploaded successfully.";
            ViewBag.FileUploadFlag = "2";

            RedirectToAction("B", "FileUploadMsgView", new { FileUploadMsg = "File   uploaded successfully" });
        }

     In ControllerB receiving part
  public ActionResult FileUploadMsgView(string FileUploadMsg)
    {
         return View();
    }

正如@mxmissile在已接受答案的评论中所说,你不应该新建控制器,因为它将缺少为IoC设置的依赖关系,也不会有HttpContext

相反,你应该像这样得到一个控制器的实例:

var controller = DependencyResolver.Current.GetService();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext, controller);
评论(12)
解决办法

控制器只是一个类--新建一个,然后像其他类成员一样调用动作方法:

var result = new ControllerB().FileUploadMsgView(" some string");

评论(12)

你的样本看起来像是伪装的代码。你需要***返回 "RedirectToAction "的结果:

return RedirectToAction("B", 
                        "FileUploadMsgView",
                        new { FileUploadMsg = "File uploaded successfully" });
评论(2)