2017-01-30 1 views
0

Ich mache eine MVC APP. Ich habe eine View, die von Model Call UserModel Erben, die 2 Eigenschaften haben. Benutzername und Passwort. Ich möchte diese Werte in Session-Variablen speichern, also verwende ich ModelBinder.MVC 5 Sitzungsvariable ModelBinder null auf Aktionsmethode

Meine Klassendefinition ist wie folgt.

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

Mein Modellbinder ist wie folgt.

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 
} 

Und ich habe definiert richtig in My global.asax

Das Problem, das ich gefunden ist, dass meine Action Method, die eine UserModel Instanz aus der Sicht erhält null ist. Es liest, was bereits meine Sitzung hat, anstatt die Ansicht zu lesen und dann in der Sitzung zu speichern.

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

Ich nehme an, es ist, weil es das gleiche Modell, das ich also in den BinderModel

zu speichern definiert, wäre meine Frage: Wie kann ich in Session speichern, ein Modell aus der Ansicht erbt mit BinderModel?

Antwort

1

Sie setzen den Nullwert auf UserModel und zurückgegeben. Sie sollten die Werte aus der Anfrage lesen und zurückgeben.

Anstatt das Modellbinder zu verwenden, können Sie das Benutzermodell direkt in Ihrer Anmeldemethode speichern. Ich bin mir nicht sicher, warum Sie Modellbinder wählen.

public async Task<ActionResult> Login(UserModel model) 
{ 
    //Session["User"] = model 
} 
Verwandte Themen