• 如何在ASP.NET MVC为Action定义筛选器


      在ASP.NET MVC中,经常会用到[Required]等特性,在MVC中,同样可以为Action自定义筛选器,来描述控制器所遵守的规则。

      

      首先,我们在ASP.NET MVC项目中定义一个TestController,控制器中包含两个Action动作方法,代码如下:

     1     public class TestController : Controller
     2     {
     3 
     4         public string FirstPage()
     5         {
     6             return "请输入ID";
     7         }
     8         //
     9         // GET: /Test/
    10 
    11         [InputID]
    12         public string Index(int id)
    13         {
    14             return "已经输入了ID";
    15         }
    16     }

      从代码中可以看出,两个动作方法均返回字符串,不同之处是后者应用了自定义的InputID筛选器。

      然后,自定义筛选器Input,筛选器同样为C#类,其继承自ActionFilterAttribute类,实现IActionFilter接口。

      在自定义的筛选器中,重写基类中的OnActionExecuting虚方法,该方法会在执行Action方法之前由ASP.NET MVC框架调用,该方法说明如下:

    1         //
    2         // 摘要:
    3         //     在执行操作方法之前由 ASP.NET MVC 框架调用。
    4         //
    5         // 参数:
    6         //   filterContext:
    7         //     筛选器上下文。
    8         public virtual void OnActionExecuting(ActionExecutingContext filterContext);
    View Code

       Input筛选器代码如下:

        public class InputID : ActionFilterAttribute, IActionFilter
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                if(String.IsNullOrEmpty(filterContext.HttpContext.Request.QueryString["id"]))
                {
                    filterContext.Result = new RedirectResult("/test/FirstPage");
                    return;
                }
                else
                {
                    return;
                }
            }
        }

      依据代码,判断查询字符串中key为id的值,如果为空,将跳转到test控制器中的FirstPage方法。否则直接返回。

      

      自定义筛选器完成,实验,在浏览器中输入不同的URL,如图:

      

      

      综上,通过自定义筛选器,并定义OnActionExecuting方法,该方法在动作方法之前执行,最终产生不同的执行结果。

  • 相关阅读:
    關於遍歷頁面所有控件的方法 空间
    Java中super的几种用法并与this的区别
    vs2010 未能正确加载方案中的一个或多个项目
    【ASP.NET】从服务器端注册客户端脚本
    sqlserver access 多数据库操作
    水晶報表中小寫變大寫的函數-VB
    RegularExpressionValidator 常用
    【转】改善C#程序的建议2:C#中dynamic的正确用法 空间
    转】VB中Set的用法
    C#索引器
  • 原文地址:https://www.cnblogs.com/SharpL/p/4617405.html
Copyright © 2020-2023  润新知