Asp.Net MVC part45 过滤器、模板页

过滤器

使用方式
自定义类继承自相应的类或接口,重写方法,作为特性使用
在控制器类中重写方法

特性方式的使用
注意:如果继承自接口需要让类实现FilterAttribute,才可以作为特性使用
使用方式1:作为Controller或Action的特性
使用方式2:在Global中注册为全局过滤器,应用于所有的Controller的Action
参数类均继承自ControllerContext,主要包含属性请求上下文、路由数据、结果

身份验证过滤器
在约束的Action执行前执行
重写OnAuthorization方法
如果不想使用默认的身份验证方式,需要将base.***删除
如果想进行跳转,需要设置上下文对象的Result属性为new RedirectResult(string url);

异常处理过滤器
当发生异常时,用于进行自定义异步处理,如记录日志、跳转页面
使用自定义异常处理,需要在web.config中为system.web添加<customErrors mode="On" />节点
重写OnException方法,不要禁用base.***
如果想进行跳转,需要设置上下文对象的Result属性为new RedirectResult(string url);

行为过滤器
在行为被执行前、后执行的过滤器
重写方法OnActionExecuting(行为执行前)
重写方法OnActionExecuted(行为执行后)

结果过滤器
在结果被执行前、后执行的过滤器
重写方法OnResultExecuting(结果执行前)
重写方法OnActionExecuted(结果执行后)

模板页
模板页:在一个页面上进行布局,并留出空白区域供子页面填充
在MVC项目中,Views文件夹下有一个Shared文件夹,用于存储所有的模板页面
视图引擎,默认优先查找aspx引擎页面,如果不存在则查找razor引擎页面

对于aspx引擎使用母版页Master
新建母版页,使用ContentPlaceHolder可以空出来多个区域供子页面填充,设置ID属性以作区分
为Action新建一个aspx引擎的页面,选择母版页并指定主填充区域的ID值
在相应的Content标签中编写具体内容的代码,通过ContentPlaceHolderID属性标识出替换母版页中哪个区域

对于Razor引擎,使用布局页.cshtml
在Shared文件夹中新建mvc布局页
使用@RenderBody()标识出空白区域
新建Action的View,选择刚才创建的布局页,属性Layout指向了布局页的地址
在页面中写一段代码,运行查看效果
如果不指定Layout则会使用_ViewStart.cshtml指定的模板页面,这是所有页面调用的部分
如果不想使用模板页面,设置Layout=“”即可
可以使用RenderSection(string name, bool required)在布局页中抠出来更多的区域,在子页面中使用@section 名称{…}进行填充

原文地址:https://www.cnblogs.com/CSharpLover/p/6115561.html