zoukankan      html  css  js  c++  java
  • Asp.net MVC3 中,动态添加filter

    filter是attribute,不支持泛型,传入的参数必须是固定的值。总之很受attribute本身的限制。

    发现一篇老外的文章,动态设置filter

    http://msdn.microsoft.com/en-us/magazine/gg309182.aspx

    写一个自己的controller基类

    override CreateActionInvoker方法

    在此方法中返回一个自己的ActionInvoker。

    可以继承MVC自带的ControllerActionInvoker

    重写ActionInvoker中的GetFilters方法。除了base的以外,添加一些自己的进去

      1: public class MyActionInvoker : ControllerActionInvoker
    
      2: {
    
      3:     protected override FilterInfo GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
    
      4:     {
    
      5:         var filters= base.GetFilters(controllerContext, actionDescriptor);
    
      6:         SetFilters(filters,actionDescriptor);
    
      7:         return filters;
    
      8:     }
    
      9: 
    
     10:     public Action<FilterInfo, ActionDescriptor> SetFilters { get; set; }
    
     11: }

    在自定义的controller基类中

      1: protected override IActionInvoker CreateActionInvoker()
    
      2: {
    
      3:     return new MyActionInvoker { SetFilters=SetFilters};
    
      4: }

    在此基类中提供一个void方法,供子类重写

      1: protected virtual void SetFilters(FilterInfo filter,ActionDescriptor actionDescriptor)
    
      2: {}

    在子类中重写SetFilters方法,添加或删除FilterInfo中的东西

    可以通过ActionDescriptor来判断是那个action,如果需要再添加

      1: if (actionDescriptor.ActionName.ToLower() == "a")
    
      2: {
    
      3:     filter.ActionFilters.Add(new testActionFilter<int>());
    
      4: }

    testActionFilter是一个泛型的,实现了IActionFilter的类。

    这样可以动态的添加filter到某个action上。并且filter不受attribute得限制

  • 相关阅读:
    正则表达式
    js trim函数 去空格函数与正则集锦
    变量的作用域问题
    for...in 语句
    JS小案例分析
    JS动态创建元素的方式
    JS类的封装
    js操作节点小结
    节点兼容
    节点小结
  • 原文地址:https://www.cnblogs.com/czcz1024/p/2222499.html
Copyright © 2011-2022 走看看