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得限制

  • 相关阅读:
    实现预定房间的功能
    实现投票,显示人数百分比的功能
    数据库包装成类
    实现微信好友列表的php代码
    几种常见的函数
    数据库查询
    用代码编辑数据库T-SQL语句
    多线程
    集合类
    一、高级查询。。。实例
  • 原文地址:https://www.cnblogs.com/czcz1024/p/2222499.html
Copyright © 2011-2022 走看看