【问题标题】:What is the best way of calling an action method from another controller?从另一个控制器调用操作方法的最佳方法是什么?
【发布时间】:2012-04-09 17:43:06
【问题描述】:

从控制器 B 中的 Action-method 方法调用控制器 A 中的 Action-method 方法的最佳方法是什么? 真的有这样的调用吗?

【问题讨论】:

  • 事实上,我有两个相关的对象,如 A 和 B。每个对象都有其独立的控制器。在控制器 A 的动作中,我也想调用控制器 B 中的动作。

标签: model-view-controller controller invoke actionmethod


【解决方案1】:

最好的方法是致电return RedirectToAction()

但正确的做法是将相关代码从您的控制器/操作移动到外部位置、服务或业务逻辑层。它们驻留在您的控制器中是错误的,它不是那个地方,现在让您头疼如何跳转到另一个控制器然后返回。这是错误的。无需寻找解决方法,只需修复您的架构即可。

【讨论】:

  • 感谢您的帮助。但我想在不同控制器的动作中间使用另一个控制器的动作。通过 RedirectToAction,我必须使用 Return 关键字。还有其他方法吗?
  • 所以不要返回;将方法结果放入变量中并使用它。例如:var b = new ControllerB(); var action = b.DoAction();
  • 真的,我用过这个,在使用RedirectToAction之前。我声明了 ControllerB 的新实例,然后调用了我需要的 Action。正如我一开始问的那样,这是调用不同控制器的 ActionMethod 的最佳方式吗?
  • 您的问题的直接答案是肯定的。但是,当正确使用 MVC 架构时,它不是正确的流程。从 Beta 1.0 开始,我就不必从另一个动作中调用一个动作,并且我在 MVC 中编写代码。
  • 似乎在MVC中,从另一个控制器调用动作方法并不好。在我的应用程序架构中,每个数据表都有一个控制器。另一方面,业务视图中的一个对象可能在我的数据库中有多个表。当我为每个表而不是每个对象定义控制器时,我将为一个对象拥有多个控制器,就像现在一样。然后,一些控制器可能会在另一个控制器中用于执行某些功能。这是我关于打电话或不打电话的歧义!如果我把通用控制器看成一个通用类,问题就迎刃而解了……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多