예제 #1
0
 /// <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;
         }
     }
 }
예제 #2
0
 /// <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);
     }
 }