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

  • 相关阅读:
    Linux:看门狗watchdog.sh程序编写示例
    通用linux程序看门狗(watchdog)python版
    Linux看门狗脚本 1.4
    Qt 6中的输入事件
    使用Qt5Compat库从Qt 5移植到Qt 6
    vertical-align(mozilla的在线帮助)
    css文字如何垂直居中?
    JS-apply 、call 以及 bind
    敢放手把事情给别人做
    页面----调用本地程序
  • 原文地址:https://www.cnblogs.com/czcz1024/p/2222499.html
Copyright © 2011-2022 走看看