2013-02-27 123 views
11

我有六个控制器调用的方法。现在我复制并粘贴每个控制器之间。所有的控制器都在同一个命名空间中。该方法基于传入的ID返回一个布尔值。例如:多个控制器之间的共享方法C#MVC4

public bool CheckSubmission(int id =0) 
{ 
    Get Records from DB with criteria 
    If Record available return true 
    else return false 
} 

我已经离开了C++ C#一段时间,并且找不到如何写这些一次。我知道在Rails中,我可以将共享函数放在ApplicationController中。我已经看到了关于这个问题的几个问题,但不是一个明确的例子,他们更多的是在OOP上阅读的内容。任何帮助将不胜感激,因为我回到这。

回答

27

创建一个ControllerBase继承自Controller的类,将此方法放在其中。

您的控制器是否从您的基础控制器继承 - 它们将得到此实现使用。

public class ControllerBase : Controller 
{ 
    public bool CheckSubmission(int id = 0) 
    { 
    Get Records from DB with criteria 
    If Record available return true 
    else return false 
    } 
} 

public class SomethingController : ControllerBase 
{ 
    // Can use CheckSubmission in here 
} 
+0

非常感谢这个明确的例子。完美工作。 – Xaxum 2013-02-27 20:46:21

+2

我特别不喜欢这个建议,但同意了,我已经使用它,它的工作原理。扩展方法会更好。静态布尔CheckSubmission(此控制器控制器,int id){等等;等等; }那么你不需要记住继承控制器。将基础控制器 – stephenbayer 2015-04-07 19:55:17

+2

维护得更好是一个痛点,该检查应该移动到独特的* service *类中,以作为(构造器)依赖项注入到任何需要的控制器中。 – superjos 2016-03-29 18:06:17