2017-01-30 5 views
0

私はMVC APPをやっています。 2つのプロパティを持つモデル呼び出しUserModelから継承するビューを持っています。ユーザー名とパスワード。これらの値をセッション変数に保存したいので、ModelBinderを使用しています。MVC 5セッション変数ModelBinder null onアクションメソッド

私のクラス定義は次のとおりです。

public class UserModel 
{ 
    public string UserName { get; set; } 
    public string Password { get; set; } 
} 

私のモデルバインダーはこのようなものです。

public class UserDetailModelBinder : IModelBinder 
{ 

    #region Constants 

    private const string SessionKey = "User"; 

    #endregion 


    #region Public Methods and Operators 

    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     UserModel user = (controllerContext.HttpContext.Session != null) ? (controllerContext.HttpContext.Session[SessionKey] as UserModel) : null; 

     if (user == null) 
     { 
      user = new UserDetail(); 
      controllerContext.HttpContext.Session[SessionKey] = user; 
     } 

     return user; 
    } 

    #endregion 
} 

そして、私は私のglobal.asax

私が見つけた問題に適切に定義されているがビューからUserModelインスタンスを受け取り、私のAction Methodがnullであるということです。ビューを読み込むのではなく、すでにセッションがあるものを読み込み、それをセッションに保存します。

[HttpPost] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Login(UserModel model) 
{ 
} 

私はモデルがBinderModelを使用してビューから継承し、私はセッションに保存することができますどのように、それは私が、私の質問は以下のようになりBinderModel

に保存するように定義された同じモデルだから、それがあると仮定しますか?

答えて

1

null値をUserModelに設定して返します。あなたは要求から値を読んでそれを返すべきです。

var request = controllerContext.HttpContext.Request; 
    if (user == null) 
    { 
     user = new UserModel() { 
      UserName= request.Form.Get("UserName").ToString(), 

      Password = request.Form.Get("Password").ToString() 
     }; 

     controllerContext.HttpContext.Session["User"] = user; 
    } 

モデルバインダーを使用する代わりに、ログインメソッドでユーザーモデルをセッションに直接格納することができます。私はモデルバインダーを選んでいる理由はわかりません。

public async Task<ActionResult> Login(UserModel model) 
{ 
    //Session["User"] = model 
} 
関連する問題