【问题标题】:Calling public function in another Controller?在另一个控制器中调用公共函数?
【发布时间】:2011-05-02 11:05:45
【问题描述】:

这里有一些关于 SO 的类似问题,但没有一个得到回答。

我应该怎么做,最好的方法?

每次我想使用它的功能时,我都可以创建另一个 Controller 类的新实例,但从长远来看,这似乎很糟糕,我错了吗?

我应该共享功能(例如UserController.GetAllUsers())吗?

【问题讨论】:

  • 如果它是一个共享函数,为什么要将它放入控制器而不是您的服务层(或您的 Web 界面位于其之上的任何层)。
  • 嗯,它不是共享函数。而且由于它与 userController 密切相关,我想将它保留在那里。截至目前,我正在创建 Usercontroller 类的新实例并通过该实例调用它。
  • 一个共享功能 - 您需要在 2 个控制器中具有相同功能的简单事实证明了这一点。而且,请不要像现在这样使用控制器,这是错误的。

标签: .net asp.net asp.net-mvc-3


【解决方案1】:

我不建议让该方法在另一个控制器上可访问。在 ASP.NET MVC 中,可以通过多种不同的方式(注入、工厂等)创建控制器,并且您不能保证您将模拟正在使用的任何机制。

相反,您应该将GetAllUsers 方法分解为一个单独的类/方法,该类/方法采用返回其值所需的参数。然后,您可以将适当的值从两个控制器传递给该新类。

该类应该没有 ASP.NET MVC 的知识;您可以从控制器实例本身传递它们。

【讨论】:

  • 好的,谢谢!我将把我所有不会产生视图的函数从我的控制器移到 helperClasses 中。那没关系,对吧?我对 MVC 很陌生,只是自学成才.. 所以我可能错过了一些基本原则。
  • @Anders:这非常正确。控制器很有可能将任何查询字符串或表单值转换为 .NET 类型,然后您将其传递给您的辅助方法。您不想自己创建控制器的原因是,在 ASP.NET MVC 中,控制器通常使用ControllerContext 设置,而仅创建新控制器并不能正确设置该信息。在创建帮助类时,您不再需要ControllerContext,控制器充当ControllerContext 和您的逻辑之间的适配器。
  • 感谢 casperOne!解释得很好:)
  • @Anders:没问题,随时。
猜你喜欢
  • 2017-04-23
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多