2011-07-01 14 views
3

私はmvc3でアプリケーションを作成しており、すべてのアプリケーション要求に必要なデータベースデータを処理する方法について疑問を抱いています。そのうちのいくつかはセッションに依存し、それらのいくつかは基本的にすべてのデータがデータベースにあります。私は自分のアプリケーションで行うとベストプラクティスであると考えて何がベストプラクティスMvc3 - (ほぼ)すべての要求に必要なデータを処理するベストプラクティス?

答えて

3

を知る

などはコントローラのコンストラクタにViewBagにあなたの共通のデータをロードすることです。

すべてのプロジェクトで、Controllerを拡張するDefaultController抽象クラスがあります。したがって、プロジェクト内のすべてのコントローラーは、コントローラーではなくDefaultControllerから継承する必要があります。そのクラスのコンストラクタで、私はそうのように、プロジェクト全体に共通するすべてのデータをロードします。

// DefaultController.cs 
public abstract class DefaultController : Controller 
{ 
    protected IRepository Repo { get; private set; } 

    protected DefaultController(IRepository repo) 
    { 
     Repo = repo; 
     ViewBag.CurrentUser = GetLoggedInUser(); 
    } 

    protected User GetLoggedInUser() 
    { 
     // your logic for retrieving the data here 
    } 
} 


// HomeController.cs 
public class HomeController : DefaultController 
{ 
    public HomeController(IRepository repo) : base(repo) 
    { 
    } 

    // ... your action methods 
} 

そのように、あなたは常にあなたのビューで利用可能なユーザーでログインしています。

0

ベースのViewModelクラスを使用することをお勧めします。 プロパティ/関数を持つ基本クラスは、いつでも利用できるはずです。

+2

あなたはdownvotingている返信を投稿してください... – Rhapsody

3

私は@rdumontと同じことをしますが、1つ例外があります。私が使用するすべての共通プロパティを定義するために使用するCommonViewModelを作成します。

public class CommonViewModel 
{ 
    public string UserName {get;set;} 
    public string Extension {get;set; } 
} 

はベースコントローラでプロパティを宣言します。

public abstract class BaseController : Controller 
{ 
    protected CommonViewModel Commons { get; private set; } 

    protected virtual void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     ViewBag.Commons = Commons; 
    } 
} 

そうすることによって、私はすべてのものがほとんど型付け得ます。私がする必要があるキャストはViewBag.CommonsCommonViewModelにキャストすることだけです。

関連する問題