我正在尝试为nopcommerce开发一个插件,并尝试在动作过滤器中捕获页面模型(提交后),以便我可以对模型属性进行一些更改。
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()
{
...
每次运行控制器方法时都可以自动调用过滤器吗?
请举例 HERE 。
答案 0 :(得分:4)
在App_Start / FilterConfig.cs中:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ModelChangerAttribute());
}
}
其他信息:您应该在Application_Start()中的global.asax中调用它:
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);