2015-11-26 1 views
2

J'essaie de développer un plugin pour nopcommerce et essayer d'attraper le modèle pour une page (après soumis) dans un filtre d'action afin que je puisse apporter quelques modifications aux propriétés du modèle.Appelez le filtre d'action automatiquement dans MVC5

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

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

et c'est le fitler:

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(); 
     } 
    } 

Mais pour le filtre d'action pour exécuter je dois préciser avant la méthode dans le contrôleur. Et je ne suis pas en bas avec ça.

ne veulent pas faire:

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

est-il donc possible d'appeler automatiquement le filtre à chaque fois une méthode de commande est exécutée?

Veuillez fournir un exemple ICI.

+0

Vous pouvez l'appliquer au contrôleur que vous voulez pour toutes les méthodes. –

+0

@StephenMuecke Je ne veux pas éditer le contrôleur à TOUS. – VSG24

+0

Vous ne savez pas ce que vous entendez par _edit le controller_? Sa classe publique [ModelChangerAttribute] yourController: Controller {'ou l'enregistre globalement sur tous les contrôleurs de' global.asax' –

Répondre

4

dans App_Start/FilterConfig.cs:

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

Informations complémentaires: vous devez appeler cela dans global.asax dans Application_Start():

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
+0

Cela fonctionne pour chaque contrôleur? – VSG24

+0

oui, mais vous pouvez vérifier le nom du contrôleur dans le filtre –