2015-11-26 3 views
2

Я пытаюсь разработать плагин для nopcommerce и попытаться поймать модель для страницы (после отправки) в фильтре действий, чтобы я мог внести некоторые изменения в свойства модели.Автоматический фильтр вызывающего действия в MVC5

public ActionResult Index() 
    { 
     Data dt = new Data(); 

     dt.id = 54; 
     dt.name = "something"; 
     return View(dt); 
    } 

и это Фитлер:

public class ModelChangerAttribute : ActionFilterAttribute 
    { 
     public override void OnActionExecuted(ActionExecutedContext filterContext) 
     { 
      Data dt = new Data(); 
      dt = (Data) filterContext.Controller.ViewData.Model; 
      dt.id++; 
      dt.name += " someotherthing"; 

      filterContext.HttpContext.Items["dt"] = dt; 
     } 

     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      //throw new NotImplementedException(); 
     } 
    } 

Но для фильтра действий для запуска мне нужно указать его перед методом в контроллере. И я не с этим справляюсь.

не хотят, чтобы сделать это:

 [ModelChangerAttribute] 
     public ActionResult Index() 
     { 
      ... 

Так можно ли назвать фильтр автоматически каждый раз, когда метод контроллера запускается?

Просьба привести пример ЗДЕСЬ.

+0

Вы можете применить его к контроллер вы хотите это для всех методов в нем. –

+0

@StephenMuecke Я не хочу редактировать контроллер во ВСЕХ. – VSG24

+0

Не знаете, что вы подразумеваете под _edit controller_? Свой публичный класс '[ModelChangerAttribute] yourController: Controller {' или зарегистрировать его глобально для всех контроллеров в 'global.asax' –

ответ

4

в App_Start/FilterConfig.cs:

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new ModelChangerAttribute()); 
    } 
} 

Дополнительная информация: Вы должны назвать это global.asax в Application_Start():

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
+0

Это работает для КАЖДОГО контроллера? – VSG24

+0

Да, но вы можете проверить имя контроллера в фильтре –

 Смежные вопросы

  • Нет связанных вопросов^_^