如何调用另一个控制器操作从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相结合