2016-04-08 15 views
0

私のControllersアクションメソッドの1つでは、現在の週番号が取得され、Viewに渡されます。私はControllersViewsの週番号が必要なことに気づいていますが、プロジェクトの別の場所で同じコードをコピー/ペーストしたくありません。コントローラーは他のコントローラーとデータを共有できます

私は静的クラスやグローバルオブジェクトなどのような場所からコードを再利用できるシンプルでスマートなソリューションを探しています。それが同じControllerの中にあったなら、私は電話する方法を実行できたかもしれませんが、他のControllersからそれが必要なので、別の解決策が必要です。助言がありますか?

+2

コードをクラスに入れ、各コントローラでそのクラスを使用します。 – CodeCaster

+1

あなたの '共有'コードを含む保護されたメソッドを持つBaseControllerを作成し、他のコントローラをそれから派生させます。 –

+0

小規模なコード例は、いつもそれを理解することを歓迎しています:) –

答えて

1

コントローラから継承するクラスを作成できます。

私はそうのようなBaseControllerクラスを作成:

public class BaseController : Controller 
{ 
    protected someDBContext db = new someDBContext(); 
    protected User currentUser; 
    public static ILog ErrorLogger = LogManager.GetLogger("ErrorLogger"); 

    protected override void Initialize(RequestContext requestContext) 
    { 
     base.Initialize(requestContext); 

     if (Session["UserID"] != null) 
     { 
      currentUser = UserToStaff.GetCurrentUser(
       (int)Session["userId"], 
       db 
      ); 
     } 

     ViewBag.currentUser = currentUser; 

     addNoticesToViewBag(); 

    }.. 

を私は は、dbContextを作成CurrentUserにオブジェクトを作成し、ここでログインを設定するように一般的なタスクのための機能とプロパティを追加します。

腕と脚を成長させないでください。初期化はすべての要求に応じて起動します。

+0

ありがとうございますが、私はセッションの解決策が良いと思います。 –

関連する問題