如何调用另一个控制器操作从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(); } 
	
控制器只是类 – 新的一个,并调用行动方法,就像任何其他类成员:
 var result = new ControllerB().FileUploadMsgView("some string"); 
 正如@mxmissile在接受的答案的评论中所说,你不应该新build控制器,因为它将缺less为IoC设置的依赖关系,并且不会有HttpContext 。 
相反,你应该像这样得到你的控制器的一个实例:
 var controller = DependencyResolver.Current.GetService<ControllerB>(); controller.ControllerContext = new ControllerContext(this.Request.RequestContext, controller); 
 您的示例看起来像伪代码。 您需要返回 RedirectToAction的结果: 
 return RedirectToAction("B", "FileUploadMsgView", new { FileUploadMsg = "File uploaded successfully" }); 
正如@DLeh所说的使用而已
 var controller = DependencyResolver.Current.GetService<ControllerB>(); 
 但是,给控制器一个控制器上下文是非常重要的,尤其是当你需要访问User对象, Server对象,或者“子”控制器中的HttpContext 。 
我添加了一行代码:
 controller.ControllerContext = new ControllerContext(Request.RequestContext, controller); 
 否则你也可以使用System.Web来访问当前的上下文,访问Server或早期的提到的对象 
NB:我的目标是框架版本4.6(Mvc5)
 这正是我发现RedirectToAction()不会传递复杂的类对象后,正在寻找。 
 例如,我想调用LifeCycleEffectsResults控制器中的IndexComparison方法,并将其传递给一个名为model的复杂类对象。 
这是失败的代码:
 return RedirectToAction("IndexComparison", "LifeCycleEffectsResults", model); 
值得注意的是,string,整数等在这个控制器方法中幸存下来,但是generics列表对象正在遭受到让人想起C内存泄漏的痛苦。
如上所述,以下是我replace的代码:
 var controller = DependencyResolver.Current.GetService<LifeCycleEffectsResultsController>(); var result = controller.IndexComparison(model); return result; 
所有的工作都是按照预期进行的 谢谢你领导的方式。
让parsing器自动做到这一点。
内部控制器:
 public class AController : ApiController { private readonly BController _bController; public AController( BController bController) { _bController = bController; } public httpMethod{ var result = _bController.OtherMethodBController(parameters); .... } } 
- DisplayNameFor()从模型中的List <Object>
 - OnAction执行和OnResult执行的区别
 - ASP.NET MVC 4 + Ninject MVC 3 =没有为此对象定义的无参数构造函数
 - 来自资源的DisplayName属性?
 - 如何使用ASP.NET MVC 3和Stackoverflow的Markdown
 - 如何从HttpPost创build操作方法中知道选中的checkbox?
 - Html.Hidden和Html.HiddenFor有什么区别?
 - 将Linqexpression式“obj => obj.Prop”转换为“parent => parent.obj.Prop”
 - 将ASP.Net MVC与WebForms相结合