首页 技术 正文
技术 2022年11月20日
0 收藏 982 点赞 4,648 浏览 1742 个字

在asp.net MVC中,每一个Action方法完成之后都会返回一个结果,而我们可以在Result过滤器中根据需要修改这个结果。例如可以根据UserAgent来判断客户端的来源是手机还是PC端,从而显示不同的视图。

自定义的Result过滤器需要继承FilterAttribute类和IResultFilter接口。

FilterAttribute类有两个关键属性:

AllowMultiple:布尔型,指示是否可指定筛选器特性的多个实例。如果可指定筛选器特性的多个实例,则为 true;否则为 false。

Order:int整型,获取或者设置执行操作筛选器的顺序。

IResultFilter接口有两个关键方法:

void OnResultExecuting(ResultExecutingContext filterContext) :在操作结果执行之前调用。即在视图引擎解析视图之前调用。此时可以改变视图指向等。

void OnResultExecuted(ResultExecutedContext filterContext):在操作结果执行后调用。

接下来操作代码亲自实践之。

自定义一个Result过滤器类:

    public class MyResultFilter : FilterAttribute, IResultFilter {
string controller = "", action = "", viewName = ""; public void OnResultExecuting(ResultExecutingContext filterContext) {
controller = filterContext.Controller.ValueProvider.GetValue("controller").AttemptedValue;
action = filterContext.Controller.ValueProvider.GetValue("action").AttemptedValue;
viewName = (filterContext.Result as ViewResult).ViewName;
filterContext.HttpContext.Response.Write(string.Format("<h4 style='background-color:black;color:white;'>过滤器:{0} <font color='red'>OnResultExecuting</font> 控制器:{1} Action方法:{2} 视图:{3}</h4>",
GetType().Name, controller, action, viewName));
}
public void OnResultExecuted(ResultExecutedContext filterContext) {
filterContext.HttpContext.Response.Write(string.Format("<h4 style='background-color:black;color:white;'>过滤器:{0} <font color='red'>OnResultExecuted</font> 控制器:{1} Action方法:{2} 视图:{3}</h4>",
GetType().Name, controller, action, viewName));
}
}

将该Result过滤器附加到某个Action方法上:

        [MyResultFilter]
public ActionResult Index() {
Response.Write("<hr>进入Index方法,并返回结果"); //如果不写上视图名称,则Result过滤器的(filterContext.Result as ViewResult).ViewName视图名称为空值。
return View("Index", Data.Data.students);
}

运行程序,查看结果:

asp.net MVC之Result过滤器浅析

根据结果可以得知,当Action方法return结果之后:

1、在执行结果之前,确实执行了OnResultExecuting方法;

2、执行结果,即视图引擎解析视图;

3、结果执行完后,开始执行OnResultExecuted方法。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,489
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,904
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,737
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,490
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,128
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,291