2

私はモデルを使用します:

public void MasterViewModel
{
   public CurrentSession Session {get;set;}
}

そして、他のすべてのビューモデルは次のようになります。

public void LoginViewModel : MasterViewModel
{

}

問題は、次のようにすべてのアクションで MasterViewModel を初期化する必要があることです。

public ActionResult Index()
{
  var model = new WelcomeIndexViewModel
  {
     Session = this.GetSession(); // from my base controller
  }

  ..
}

私のベースコントローラーにはメソッドがありますGetSession()

各アクションメソッドでこれを行う必要がないように、何らかの方法でベースコントローラーにこの値を設定することは可能ですか?

4

2 に答える 2

3

BaseControlleroverrideでできることの 1 つは、次のようOnResultExecutingにビュー モデルを乗っ取り、Session変数 intを挿入することです。

public class BaseController : Controller
{
    protected override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var viewResult = filterContext.Result as ViewResult;
        if (viewResult != null)
        {
            var viewModel = viewResult.Model as MasterViewModel;
            if (viewModel != null)
            {
                viewModel.Session = GetSession();
            }
        }
        base.OnResultExecuting(filterContext);
    }
}

注: これはreturn View(model);、コントローラーで使用するかどうかを確認するだけです。他のアクションの結果も確認する場合があります (部分ビュー、json など...)。

お役に立てれば。

于 2013-08-30T14:54:43.933 に答える