/// <summary> /// Die Werte für die Binding des Models an die Session schreiben. /// </summary> /// <param name="controllerContext"></param> /// <param name="bindingContext"></param> public static void WritePropertyValuesToSession(ControllerContext controllerContext, ModelBindingContext bindingContext) { if (controllerContext.HttpContext.Session != null) { SessionValueProvider sessionValueProvider = SessionValueProvider.FromBindingContext(bindingContext); SessionPersister.WriteToSession(controllerContext.HttpContext.Session, sessionValueProvider); } }
/// <summary> /// Erzeugt einen ValueProvider aus dem BindingContext. /// /// Anwendungsfall: /// Die Werte sollen aus dem Request gelesen werden. /// </summary> /// <param name="bindingContext"></param> /// <returns></returns> public static SessionValueProvider FromBindingContext(ModelBindingContext bindingContext) { IDictionary <string, ValueProviderResult> valueProviderResults = new Dictionary <string, ValueProviderResult>(); foreach (KeyValuePair <string, ModelMetadata> modelMetadata in bindingContext.PropertyMetadata) { string key = string.Format("{0}.{1}", bindingContext.ModelName, modelMetadata.Key); ValueProviderResult valueProviderResult = bindingContext.ValueProvider.GetValue(key); valueProviderResults.Add(key, valueProviderResult); } SessionValueProvider sessionValueProvider = new SessionValueProvider(valueProviderResults); return(sessionValueProvider); }
/// <summary> /// Schreibt die Werte an die Session. /// </summary> /// <param name="session"></param> /// <param name="values"></param> public static void WriteToSession(this HttpSessionStateBase session, SessionValueProvider values) { Require.NotNull(session, "session"); Require.NotNull(values, "values"); /*Alle Werte aus dem Value-Provider an die Session schreiben.*/ foreach (string key in values.Keys) { ValueProviderResult valueProviderResult = values.GetValue(key); if (valueProviderResult != null) { /*Neu gesetzten Wert an die Session schreiben*/ session[key] = valueProviderResult; } else { /*Wenn der Wert nicht mehr gesetzt ist, dann leeren, damit keine alten Werte an der Session zurückbleiben*/ session[key] = null; } } }
/// <summary> /// Erzeugt einen eigenen ValueProvider mit den Werten für die ModelProperties aus der Session. /// </summary> private SessionValueProvider CreateSessionValueProvider(ControllerContext controllerContext, ModelBindingContext bindingContext) { return(SessionValueProvider.FromSession(controllerContext, bindingContext)); }