2013-02-27 24 views
11

6つのコントローラで同じメソッドを呼び出します。今は各コントローラ間でコピー&ペーストしています。すべてのコントローラは同じ名前空間にあります。このメソッドは渡されたidに基づいてboolを返します。例:複数のコントローラ間でのメソッドの共有C#MVC4

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

私はしばらくの間、C++から離れていて、これらを一度書く方法を見つけることはできません。私はRailsで、共有関数をApplicationControllerに入れることができることを知っています。私はこのことについていくつかの質問を見ましたが、明確な例ではありません。彼らはOOPで読んだ行に沿っています。私がこれに取り掛かると、どんな助けもありがたいです。

答えて

27

Controllerを継承するControllerBaseクラスを作成し、このメソッドをその中に配置します。

コントローラーにベースコントローラーを継承させてください。これらのコントローラーは、この実装を使用するようにします。

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

+2

私は特にこの提案が嫌いですが、同意した、私はそれを使用して動作します。拡張メソッドは良いでしょう。 static bool CheckSubmission(このコントローラコントローラ、int id){blah;そうです。 }コントローラを継承することを覚えておく必要はありません。ベースコントローラー – stephenbayer

+2

をさらに良く維持することは苦労します。そのチェックは、必要なコントローラーに(コンストラクター)依存として注入するために、別個の* service *クラスに移動する必要があります。 – superjos

関連する問題