/// <summary> /// Перед выполнение действия сохраняем его параметры во временное хранилище. /// </summary> public override void OnActionExecuting(ActionExecutingContext filter_context) { base.OnActionExecuting(filter_context); if (ParametersHook) { // Если есть параметры... if (filter_context.ActionParameters.Count > 0) { IList <PRGParameter> prg_parameters = new List <PRGParameter>(); IDictionary <string, object> action_parameters = filter_context.ActionParameters; // перебираем их... foreach (var action_parameter in action_parameters) { var prg_parameter = new PRGParameter { Name = action_parameter.Key, Value = action_parameter.Value }; prg_parameters.Add(prg_parameter); } // и сохраняем во временное хранилище. filter_context.Controller.TempData[TempPRGParametersKey] = prg_parameters; } } }
/// <summary> /// Перед выполнением действия внедряем сохраненные параметры. /// </summary> public override void OnActionExecuting(ActionExecutingContext filter_context) { base.OnActionExecuting(filter_context); ModelStateKey = ModelStateKeyPrefix + filter_context.ActionDescriptor.ActionName + filter_context.ActionDescriptor.ControllerDescriptor.ControllerName; if (ParametersHook) { // Формируем ключи для доступа к данных... PRGParametersKey = PRGParametersKeyPrefix + filter_context.ActionDescriptor.ActionName + filter_context.ActionDescriptor.ControllerDescriptor.ControllerName; TempDataDictionary temp_data = filter_context.Controller.TempData; // если в хранилище есть данные... if (temp_data.ContainsKey(PRGParametersKey) && temp_data[PRGParametersKey] != null) { // забираем данные как тип... var prg_parameters = temp_data[PRGParametersKey] as IList <PRGParameter>; // если данные нужного типа... if (prg_parameters != null) { // берем список параметров метода... ParameterDescriptor[] parameter_descriptors = filter_context.ActionDescriptor.GetParameters(); // перебираем их... foreach (ParameterDescriptor parameter_descriptor in parameter_descriptors) { PRGParameter prg_parameter = prg_parameters.Where(p => p.Name == parameter_descriptor.ParameterName).FirstOrDefault(); if (prg_parameter != null) { filter_context.ActionParameters[parameter_descriptor.ParameterName] = prg_parameter.Value; } } } } temp_data.Remove(PRGParametersKey); } }