MVC中的修饰标签有很多用途。它以修饰标签形式应用在控制器或控制器中的动作上。

最先想到的就是AcceptVerbs标签,在创建的时候,如果导航到创建视图,但不创建,则:

public ActionResult Create()
{
    return View();
}

这个动作返回视图,当Get方法向控制器请求时,会调用这个动作;然后,当以Post方法来向控制器请求时,会执行:

 
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Customer customer)
{
    try
    {
         if (!_service.CreateProduct(customer))
         return View();
         return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}
 

这里,为这个动作添加了[AcceptVerbs(HttpVerbs.Post)]修饰,它声明当Post向控制器请求时,由这个动作(方法)返回视图。

这里,AcceptVerbs属性(AcceptVerbsAttribute)很重要,很有用。

(一)动作标签

1AcceptVerbs 用于指定Http谓词

它有两种构造器:

·AcceptVerbsAttribute(array<String>[]()[])

·AcceptVerbsAttribute(HttpVerbs)

其中第二种最常用,通过HttpVerbs枚举指定谓词。其中HttpVerbs枚举定义为:

 
public enum HttpVerbs
{
    Delete = 8,
    Get = 1,
    Head = 0x10,
    Post = 2,
    Put = 4
}
 

在使用时,通常Get方式(默认)来直接渲染视图,而Post方式用于表单提交。例如在添加新客户时,以链接导航请求视图,直接返回添加页视图,而在表单提交后,Post请求视图,在动作中,处理添加,并返回视图。(说明一下:在浏览请求时,路由到控制器下的动作上,然后由动作处理模型返回视图,所以这里的请求视图也可以理解过去)

2ActionName用于指定动作的别名

它所声明的就动作的别名,这个别名与路由访问,视图密切相关。通过这个标签可以创建与别名相同的视图,而不在以动作名访问。

它有一个构造器:

public ActionNameAttribute(string name)

例如:

public ActionResult NewsList()
{
    List<News> _list = new List<News>();
    ……
    return View(_list);
}

此时它的视图名为:NewsList,现在通过ActionName标签指定别名:

[ActionName("NewsList2")]
public ActionResult NewsList()
{
    ……
}

此时就不能以News/NewsList这个地址来访问,要以News/NewsList2来访问,而此时的视图名应该改为:NewsList2

然后正常访问了。

这个标签其实也是很有用的,它利于空间管理。

3NonAction 用于指明一个控制器方法不作为一个动作

它有一个默认的构造器

如下边这个方法:

[NonAction]
public ActionResult NoneList()
{
    return View();
}

如果对NoneList方法添加NonAction修饰,则在视图不存在的情况下,会提示视图不存在。而添加这个修饰后,会提示路由错误(动作不存在,所以无法路由)。

4OutputCache用于声明动作的输出会被缓存

它有一个默认的构造器,并有很多属性,这里选择几个说明一下:

·Duration 缓存的时间周期,以秒计

·Location 用于指定输出缓存项的位置

这个属性是一个枚举值:

Any|Client|Downstream|Server|None|ServerAndClient

默认值是Any,表示输出缓存可用于所有请求,包括客户端浏览器、代理服务器或处理请求的服务器上。

·VaryByParam 定义了一个分号分隔的字符串列表,用于使输出缓存发生变化。默认情况下,这些字符串与用GET方法属性发送的查询字符串值对应,或与用POST方法 发送的参数对应。当将该属性设置为多参数时,对于每个指定的参数,输出缓存都包含一个请求文档的不同版本。可能的值包括“none”、“*”和任何有效的 查询字符串或POST参数名称。

·Shared 布尔值,用于指明输出缓存是否可以被多个页共享。默认值为false

·CacheProfile  用于定义与该页关联的缓存设置的名称

·NoStore 个布尔值,用于决定是否阻止敏感信息的二级存储。

例如:对时间进行缓存,在视图中:

<%=DateTime.Now.ToString() %>

动作中:

[OutputCache(Duration=5,VaryByParam="none",
Location=OutputCacheLocation.Any,NoStore=true)]
public ActionResult ShowTime()
{
    return View();
}

现在缓存5秒。

5ValidateInput是否开启危险代码输入验证

默认是验证的

[ValidateInput(true)]
public ActionResult Create(contacts contact)

当开启后,在文本框中添加<script>字串,提交会出异常:

从客户端(firstname="<script>")中检测到有潜在危险的 Request.Form 值

6HandleError用于过滤异常

它的属性:

·ExceptionType 指定过滤器处理那种或哪些类型的异常,如果没有指定该属性,过滤器将会处理所有的异常。

如果某个Action设置了多个HandleErrorAttribute,可能通过Order属性用来设置使用哪个过滤器。它的值从-1(最高优先级)到任何正整数之间的整数来标识其优先级,值越大,优先级别越低。

Order属性遵循以下规则:

应用到Controller上的过滤器将会自动应用到该Controller的所有Action上。如果Controller和Action都应用了HandleErrorAttribute,那么只要Order属性值相同,将会先执行Controller上的过滤器,而后才会执行Action上的过滤器。

对于相同Order属性的过滤器,其执行先后次序不定。

如果没有指定Order属性,则默认为-1,这意味着该过滤器将比其他的过滤器优先执行,除非其他过滤器指定了Order为-1。

如果有多个过滤器可适用,那么第一个可以处理该异常的过滤器会被首先调用,然后针对该异常的处理将会终结。

·View 指定发生异常时过滤器要显示的视图名称

ASP.NET MVC框架将异常信息存储在ViewDataDictionary中来传递给Error视图,该ViewDataDictionaryModel属性即是ExceptionContext类的一个实例,其中ViewData:

ActionName:目标Action方法的名称

ControllerName:目标Controller的名称

Exception:异常对象

·Master 指定视图母版的名称,如果有的话

·Order 指定过滤器应用的顺序,如果一个Action有多个HandleErrorAttribute过滤器

然后在config文件中要设置CustomerError章节

<customErrors mode="On" defaultRedirect="Error" />

实例:

[HandleError(View="CustomError")]
public ActionResult Create(contacts contact)
{
    throw new Exception("有异常发生了");
}

当Create时,会抛出异常,此时会显示CustomerError视图。

在Web.config文件中设置:

<customErrors mode="On" defaultRedirect="Error" />

异常信息:存储在ViewDataDictionary中来传递给Error视图,该ViewDataDictionaryModel属性即是ExceptionContext类的一个实例

那么,现在追踪发生异常的控制器与动作及异常信息内容。在CustomerError视图中:

Controller: <%=((HandleErrorInfo)ViewData.Model).ControllerName %>
Action: <%=((HandleErrorInfo)ViewData.Model).ActionName %>

然后在访问时:

CustomError

Controller: contact

Action: create

Message: 有异常发生了0123456789

如果不指定异常过滤器的View属性,则显示默认的视图:

如果在本控制器中没有找到自定义的视图,则显示Shared下的Error视图:

在本控制器下有Error视图:

<h2>Error</h2>
<h4>这是自定义错误页面</h4>

而在shared下的Error视图为:

<h2>
    Sorry, an error occurred while processing your request.
</h2>

此时显示控制器下的视图,当没有时,会显示默认视图。

MVC 修饰标签的更多相关文章

  1. 关于SpringMVC中找不到&lt;mvc:resources/&gt;标签的解决办法

    在springMVC中我们经常会用到<mvc:resources/>标签,但是有些编辑器中的schema过于陈旧.导致找不到<mvc:resources/>标签. 经过试验,有 ...

  2. Spring3中的mvc:interceptors标签配置拦截器

    mvc:interceptors 这个标签用于注册一个自定义拦截器或者是WebRequestInterceptors. 可以通过定义URL来进行路径请求拦截,可以做到较为细粒度的拦截控制. 例如在配置 ...

  3. springmvc的mvc:view-controller标签

    1.重定向 <mvc:view-controller path="/" view-name="redirect:/admin/index"/> 即如 ...

  4. 2016 系统设计第一期 (档案一)MVC a标签 跳转 Html.ActionLink的用法

    html: <a class="J_menuItem" href="baidu.com">权限管理</a> cshtml: 原有样式: ...

  5. (六)学习MVC之标签a提交页面

    标签<a>如何做到与<input type="submit"/>一样有提交页面信息的效果? @using (Html.BeginForm("Log ...

  6. MVC Razor标签

    1. RenderBody在Razor引擎中没有了“母版页”,取而代之的是叫做“布局”的页面(_Layout.cshtml)放在了共享视图文件夹中.在这个页面中,会看到标签里有这样一条语句:@Rend ...

  7. Spring标签&lt;mvc:annotation-driven/&gt;解读

    一.AnnotationDrivenBeanDefinitionParser 通常如果我们希望通过注解的方式来进行Spring MVC开发,我们都会在***-servlet.xml中加入<mvc ...

  8. 关于spring 3.0.5的 &lt;mvc:resources mapping=&quot;***&quot; location=&quot;***&quot;&gt;标签的使用

    spring mvc 的<mvc;resources mapping="***" location="***">标签是在spring3.0.4出现的 ...

  9. HTML学习笔记5:修饰符和特殊标签

    ①修饰符:     作用:修饰显示的方式,并不改变网页的结构,需要修饰的内容写在修饰标签内     常用文字和段落修饰符: 文字斜体:<i></i>  或  <em> ...

随机推荐

  1. unity小地图技术方案总结

    技术方案 一:从顶视图获取实时小地图(优点实现快容易对地图进行放大缩小操作而且地图,缺点是不好对地图做出修改,只能在顶部加个另外的相机层来遮盖) 1.创建Redertexture并改名为smallma ...

  2. hive 删除分区数据

    alter table 表 drop partition(分区); 例: 表是:  user_all_info 分区是 day_id,month_id 我要删除10月10号的数据 那么: alter ...

  3. Linux下快速迁移海量文件的操作记录

    有这么一种迁移海量文件的运维场景:由于现有网站服务器配置不够,需要做网站迁移(就是迁移到另一台高配置服务器上跑着),站点目录下有海量的小文件,大概100G左右,图片文件居多.目测直接拷贝过去的话,要好 ...

  4. bzoj2083【Poi2010】Intelligence test

    听说正解是链表,然而被我暴力水过了 先开vector记录每个数在原串中出现的位置 之后对于每个匹配串的每一位,找比当前位置大的第一个当前元素是哪个,有就更新,没有就"NIE" #i ...

  5. MySql如何编写高效的SQL

    最近应团队要求,研究整理了下,mysql相关的优化,有些是根据实际java项目中碰到的情况经验之谈.欢迎讨论~ SQL 语言是一种强大而且灵活的语言,在使用 SQL 语言来执行某个关系查询的时候,用户 ...

  6. [SoapUI] SoapUI Response 格式控制

    application/后面可以修改为自己所需要的内容格式.

  7. Spring MVC 事务配置

    Spring MVC事务配置 要了解事务配置的所有方法,请看一下<Spring事务配置的5种方法> 本文介绍两种配置方法: 一.      XML,使用tx标签配置拦截器实现事务 一.   ...

  8. Windows Store App 应用设置存储

    应用设置存储主要分为本地存储和漫游存储两种方式.本地存储是指将应用的设置信息存储在本地存储空间中,而漫游存储则是指将应用的设置信息存储在网络服务器中,相对于本地存储而言,漫游存储支持多台设备之间的应用 ...

  9. spoj 839 Optimal Marks(二进制位,最小割)

    [题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17875 [题意] 给定一个图,图的权定义为边的两端点相抑或值的 ...

  10. php实现调用微信上传照片然后保存至服务器与数据库

    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>    <s ...