【发布时间】:2017-10-13 04:38:05
【问题描述】:
我有个小问题,
在很多示例中,我看到不返回任何视图或部分视图的控制器动作也被添加到同一个控制器中 - 现在在我的情况下,我有多个控制器,我需要运行相同的动作,例如
- 控制器 A 将运行操作 A
- 控制器 B 将运行操作 A
在控制器 A 和 B 中添加动作 A 看起来不对。
由于我正在使用 AJAX 对动作 A 进行 [HttpPost] 调用,因此,我希望它位于控制器中以便于 POST 访问,尽管我不想在两个控制器中添加相同的动作
我可以在控制器 A 中添加动作 A 并让控制器 B 访问从控制器 A 请求的相同动作,但我在想什么
**如果我创建一个名为
的新控制器怎么样commonActionContoller
并在其中放入“ACTION A”,并在需要Action A时让所有东西都使用commonActionContoller?**
干杯
编辑:添加示例如下
一个具有 Person 和 Country 的示例应用程序,因此 Person 模型对于所有国家/地区都是相同的,但我们对每个国家/地区都有不同的 Controller,因此如果管理员想要将 Person 的模型与字段 IsEmpoyed 从 true 更新为 false,那么他们会去例如 {USA}/Index 控制器并将 true 切换为 false。现在,这对于 {AUS}/Index 和 {China}/Index 是相同的,因此将 IsEmpyed 更改为 true/false 的操作在所有控制器中都是相同的。为了完成这项工作,我不想将 Action IsEmplyed 添加到所有国家/地区控制器 - (想不出更好的例子) -
【问题讨论】:
-
action a实际上是做什么的? -
但问题仍然存在:如果您从
ControllerA或ControllerB调用CommonAction,您会从哪里返回?我的意思是,您将如何确定调用此CommonAction的操作? -
这在我看来实际上是一个 REST API 和路由设计问题。您可能会提供有关您正在谈论的路线和行动性质的更多信息。 / 将其提取到服务中无法解决哪个特定问题?
-
好吧,我阅读该示例的方式是您无缘无故地复制控制器。根据您提供的信息,我只会重新设计路由。意思是,我将有一个带有路由
"{:country}/index"的控制器,从路由中读取country参数并从那里开始。首先,我认为每个国家都不需要控制器。再一次,我很确定你可能想重新考虑你的 rest api / routes 设计作为第一件事。更不用说如果所有“控制器”的某些东西都相同(如果它们应该分开),那么它本身就是控制器的候选者。 -
好吧,那么您不应该切换/复制视图而不是控制器吗?
标签: c# asp.net-mvc