【ASP.NET MVC4】第八课:MVC数据验证、验证特性、自定义验证

ASP.NET MVC4 专栏收录该内容
11 篇文章 2 订阅

知识点:MVC数据验证概述、验证特性的使用、自定义验证、扩充基于 Entity Framework 的数据模型。

1、MVC 数据验证概述

1.1  为什么要进行数据验证

ASP.NET MVC 中的视图(View)负责向用户呈现操作界面、收集数据并传回服务器。在用户使用过程中,由于用户疏忽或恶意原因,用户输入数据对系统可能存在各种隐患,因此需要对从用户界面收集的数据进行各种规则的验证,确保数据符合系统要求。

 

1.2  数据验证的方案(双重验证

Web应用程序必须对用户输入进行验证,不仅需要在客户端进行验证,在服务器端也需要进行验证。客户端进行验证会对用户向表单中输入的数据给出即时的反馈,提高用户体验;在服务器端进行用户输入验证除了服务器端验证可以实现更复杂的验证逻辑外,主要是由于来自网络的数据是不能信息的。

用户输入数据的验证既包括逻辑验证,也需要实现用户友好的错误提示信息,当验证失败时,把提示信息显示到用户界面上,而且还需要提供从验证失败中恢复的机制。 ASP.NET MVC 进行验证最主要的是关注验证模型的值。ASP.NET MVC 验证框架是可扩展的,可以采用开发人员想要的方式构建验证模式,默认的方法是声明式验证。

 

1.3  用户输入数据有效性验证的流程

在进行用户输入的有效性验证时,主要验证流程如下所述。

1.用户提交数据时在客户端浏览器中进行验证,验证操作包括: ①验证所有必须填写的内容是否已填写; ②验证数据的格式是否符合要求; ③如果可验,则验证数据的数据类型;④如果发现有数据是无效的,则立即反馈如何修改无效数据为有效数据的信息给客户,但数据不提交给服务器,当用户修改所有数据符合验证要求后,用户才能把数据提交给服务器。

2.当所用客户端验证都通过后,数据被提交给服务器;

3.在服务器端对数据按服务器的验证要求进行数据有效性验证,以保证数据符合业务规则的要求以及请求数据中不包含潜在的攻击。如果数据验证失败,则数据不会按业务流程进行处理而是会把验证的错误信息反馈回客户端,让用户进行必要的修改;

4.当服务器端对数据有效性验证通过后,业务处理流程才继续进行,最终显示一个处理结果的View或下载文件等。

 

示例练习1:模拟用户注册(准备工作)

第一步,新建一个 空 MVC 项目,添加一个控制器“Home”,并给"Ixdex"方法,添加一个视图。

第二步,在新添加的 Index.cshtml 文件中,输出注册表单。语法如下:

关键代码:

    <div>
        <h2>注册账号</h2>
        @using (Html.BeginForm()) { 
            <p>用户名:@Html.TextBox("userName")</p>
            <p>年龄:@Html.TextBox("userAge")</p>
            <p>密码:@Html.Password("pwd")</p>
            <p>确认密码:@Html.Password("confirmPwd")</p>
            <p>电子邮件:@Html.TextBox("userEmail")</p>
            <p><input type="submit" value="注册" /></p>
        }
    </div>

第三步,绑定对象类型数据。可以参照博文:【ASP.NET MVC4】第七课:模型绑定、绑定简单类型数据和对象类型数据,第3个知识点。

①在项目资源管理器中,右键单击Models文件夹,依次点击【添加】→【类】,并给类起名为“RegisterModel”,然后单击【添加】按钮。

②给 RegisterModel 类,添加属性。(注意:这里的属性名称,要和表单里控件的名称一致

关键代码:

    public class RegisterModel
    {
        public string userName { get; set; }
        public int userAge { get; set; }
        public string pwd { get; set; }
        public string confirmPwd { get; set; }
        public string userEmail { get; set; }
    }

第四步,在 HomeController.cs 文件中,引用本项目的Models:(代码:using MvcApplication1.Models;)

第五步,在 HomeController.cs 文件中,重写一个Index()方法:

        [HttpPost]
        public ActionResult Index(RegisterModel Ruser)
        {
            ViewBag.result = "你好,你的用户名是:" + Ruser.userName + ",你的年龄是:" 
                + Ruser.userAge + ",你的密码是:" + Ruser.pwd + ",你的邮箱是:" 
                + Ruser.userEmail;
            return View();
        }

第六步,在 Index.cshtml 文件中显示数据。添加一行代码:@ViewBag.result

第七步,运行测试:

数据验证

注意:对比一下第一次和第二次数据的数据,这是否符合常理?(第一次,我们全部输入了正确信息。第二次,我们输入信息的时候,有些是错误的,有些是空的,但是也显示欢迎语了。)

 

2、常用验证属性的使用

每个系统都会有用户账号管理功能,用户账号的创建及管理对其中的数据都有相应的要求,在向服务器提交时都需要进行有效性验证。MVC 提供了几种主要的验证属性可供直接使用。这些验证属性都属于System.ComponentModel.DataAnnotations 命名空间,并且继承自ValidationAttribute 类,该类包括一个基本属性即 ErrorMessage,它是用来定义消息的属性。 

MVC内置的常用验证属性

     数据验证属性                           说明                            示例
Required属性值必须非空或者不能只是空格[Required]
StringLength字符串长度验证(可以单独设置最大长度,也可以同时设置最小长度)[StringLength(10)]
RegularExpression属性值必须匹配正则表达式[RegularExpression("(13|15|18|17)\\d{9}")]
Range属性值必须在指定的数值范围内[Range(10,20)]
Compare比较验证,验证两个属性值是否一致[Compare("Password")]
Display指定显示属性名的字符串,默认为属性名[Display(Name="用户名")]

在ASP.NETMVC中,通过使用验证属性来帮 Model 属性设置验证规则,步骤如下:

1.  在属性中添加验证规则

2.  应用验证规则

3.  显示验证信息

 

2.1  Required 验证特性(非空验证)

Required 属性确保被修饰的属性在验证时必须不为空,否则验证失败。写法如下:[Required]

示例练习2:进行非空验证

第一步,在 RegisterModel .cs 文件中,引用命名空间。using System.ComponentModel.DataAnnotations;

第二步,在属性中添加验证规则。添加方法:直接在属性上面一行,添加 [Required] 即可。

 

第三步,运行测试。(测试,当我们不填写用户名时,似乎没有变化。为什么?因为我们虽然添加了验证属性,但是没有对结果进行判断。)

错误验证-required

第四步,对支持POST请求的Index方法,增加一个数据验证通过判断。

ModelState对象的使用

  • 在模型类中定义验证规则后,ASP.NET MVC 在将视图中的数据映射到模型时,会自动应用模型类上的规则。
  • 验证过程中,会自动把验证错误信息添加到 ModelState 数据字典中。

后台程序中如何验证是否通过?(借助 ModelState 对象的IsValid 属性)

ModelState 的常用成员功能
IsValid判断模型上所有验证是否通过
AddModeError(key,value)添加自定义的错误信息

关键代码:

        [HttpPost]
        public ActionResult Index(RegisterModel Ruser)
        {
            if(ModelState.IsValid)//增加一个判断,如果验证通过,则获取数据,用于显示
            {
                ViewBag.result = "你好,你的用户名是:" + Ruser.userName + ",你的年龄是:" 
                                + Ruser.userAge + ",你的密码是:" + Ruser.pwd + ",你的邮箱是:" 
                                + Ruser.userEmail;
            }
            return View();
        }

第五步,运行测试。用户名没有输入信息,单击“注册”按钮时,不再提示注册提示语。为什么?因为没有通过验证。但是用户不知道为什么,能否给用户一个提示呢?

数据验证-required

第六步,添加错误提示。在 Index.cshtml 文件中添加一行代码。<p>@Html.ValidationSummary()</p>

代码说明:@Html.ValidationSummary() 用于返回表单在后台验证的结果。 如,当后台 if (ModelState.IsValid) 失败后,错误信息就会显示到 @Html.ValidationSummary()

运行测试后,我们看到有了错误提示。(但是这个错误提示,存在两个问题:①用户可能看不懂。如何让错误提示更加友好一些?②我们只对用户名进行验证,但是这里对密码也进行了验证。)

数据验证-非空

第七步,在 RegisterModel .cs 文件中,给 Required 验证特性添加一个参数 ErrorMessage 。

运行测试

错误提示-ErrorMessage

 

思考一个问题,如果用户在用户名里,输入一个空格,能否验证通过?为什么? 

接下来解决第六步出现的第2个问题,为什么 userAge 属性也被进行了非空验证?

第八步,在 RegisterModel .cs 文件中,给 userAge 属性设置为非空类型。实现方法:在数据类型 int 后面添加一个英文的问号。

代码说明:int? 表示可空类型,就是一种特殊的值类型,它的值可以为 null 。(在C#中,值类型不能为 null ,引用类型可以为 null )

再次运行测试,解决了第二个问题。

验证特性-int类型

思考一个问题,如果需要用户输入 double 类型的数据,是否需要进行非空?

 

 

2.2  StringLength 验证特性(长度验证)

StringLength 属性可以限制输入数据的长度。因为在数据库中实际保存的字段的值,一般都会有长度限制。写法如下:

设置最大长度:[StringLength(int maximumlength)]   使用举例:[StringLength(5)]

设置最大长度和最小长度:[StringLength(100,MinimumLength=10)]

示例练习3:进行长度验证

第一步,在 RegisterModel .cs 文件中,给 userName 属性添加长度验证特性。

运行测试:

长度验证

 第二步,给 StringLength 验证特性,同时设置最小值和最大值。

运行测试:

长度验证-最大值和最小值

 第三步,给 StringLength 验证特性,添加 ErrorMessage 参数。(使得提示信息更友好)

运行测试:

验证长度特性

 

2.3  Range 验证特性(范围验证)

Range 验证特性可以用于验证数字(整数和浮点数)、时间等类型的范围。写法如下:[Range(int minimum,int maximum)]

示例练习4:进行长度验证

第一步,在 RegisterModel .cs 文件中,给 userAge 属性添加范围验证特性。

运行测试:

范围验证

思考:如何修改这里的提示语?(给 Range 添加 ErrorMessage 参数)
 

 

2.4  Compare 验证特性(一致性验证)

Compare 验证特性一般用来验证两个属性的值是否一致,比较典型的是注册时用于确认密码。写法如下:[Compare("属性名称")]

示例练习5:进行密码一致性验证

第一步,在 RegisterModel .cs 文件中,给 confirmPwd 属性添加一致性验证特性。我们这里想让 confirmPwd 属性和 pwd 属性,进行一致性验证。因此给 confirmPwd 属性添加语句:[Compare("pwd")]

但是,在使用 Compare 验证特性时报错,提示“未能找到类型或命名空间名称"Compare”(是否缺少 using 指令或程序集引用?)

问题原因:缺少MVC命名空间

解决办法:在当前文件中,添加一条引用语句:using System.Web.Mvc;

运行测试:

错误验证-Compare

提出问题:验证特性生效,但是提示语不太友好,怎么办?

实现办法: Compare 特性添加 ErrorMessage 参数:[Compare("pwd",ErrorMessage="两次密码输入不一致")]

 

2.5  RegularExpression 验证特性(正则验证)

RegularExpression 验证特性,一般用来验证属性的值是否符合正则表达式,一般用来验证邮箱、手机号码等。写法如下:Compare("属性名称")

示例练习6:进行邮箱验证

第一步,在 RegisterModel .cs 文件中,给 userEmail 属性添加正则验证特性。

提示:关于正则表达式的写法,不要求必须掌握,网上有很多网友分享的正则表达式写法,直接搜索使用即可。

运行测试:

正则验证

提出问题:验证特性生效,但是提示语不太友好,怎么办?

实现办法: 给RegularExpression 特性添加 ErrorMessage 参数:[RegularExpression(@"/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/",ErrorMessage="请输入正确的邮箱格式")]

思考一个问题:我们的错误提示语,都集中在下面,能否让每个错误提示语,对应的出现在每个表单控件的后面?

 

示例练习7:修改提示语出现的位置

第一步,打开 Index.cshtml 文件,修改代码。我们不需要集中显示错误提示信息了,因此可以删掉或者注释掉代码:<p>@Html.ValidationSummary()</p>

 第二步,在视图文件 Index.cshtml 中,引用数据类RegisterModel。实现方法,在文件顶部,添加一行代码:@model MvcApplication1.Models.RegisterModel

代码说明:默认情况下,视图中的 Model 属性泛指 Action 传递给 View 的强类型数据,可以由视图代码直接访问。我们可以通过明确指定 Model 的具体类型,而使用强类型数据,Model 使用了 C# 语言的静态属性和 Visual Studio 程序对 Razor 视图引擎的智能感知功能。强类型声明的写法是在视图中用 @model 关键字指定 Model 属性的数据类型,语法:@model 类型名称 

本例中,在  Index.cshtml  视图中使用“@model MvcApplication1.Models.RegisterModel ”语句,声明视图为强类型,Model 的数据类型是 RegisterModel 
 
 

第三步,在控件后面添加错误显示信息。关键语句: @Html.ValidationMessageFor(m=>m.userName)

代码说明:Html.ValidationMessageFor() ,用来显示数据模型输入验证失败时的错误信息。

    <div>
        <h2>注册账号</h2>
        @using (Html.BeginForm()) { 
            <p>用户名:@Html.TextBox("userName")@Html.ValidationMessageFor(m=>m.userName)</p>
            <p>年龄:@Html.TextBox("userAge")@Html.ValidationMessageFor(m=>m.userAge)</p>
            <p>密码:@Html.Password("pwd")</p>
            <p>确认密码:@Html.Password("confirmPwd")@Html.ValidationMessageFor(a=>a.confirmPwd)</p>
            <p>电子邮件:@Html.TextBox("userEmail")@Html.ValidationMessageFor(m=>m.userEmail)</p>
            <p><input type="submit" value="注册" /></p>
            @*<p>@Html.ValidationSummary()</p>*@
        }
    </div>

第四步,运行测试。

mvc数据验证

练习:可以根据实际情况,将示例中未添加验证的属性,加上适合的验证特性。

 

2.6  DataType 验证特性(数据类型验证)

RegularExpression 验证特性,一般用来验证属性的值是否符合正则表达式,一般用来验证邮箱、手机号码等。写法如下:Compare("属性名称")

示例练习8:增加一个出生日期

第一步,在视图文件 Index.cshtml 中,增加一行代码,用于输入出生日期。代码:<p>出生日期:@Html.TextBox("BornDate")</p>

第二步,给 RegisterModel 类,添加属性。打开 RegisterModel.cs 文件,在类中,编写代码。public DateTime? BornDate { get; set; }

第三步,给 BornDate 属性,添加验证特性。语句代码:[DataType(DataType.DateTime)]

第四步,在视图文件 Index.cshtml 中,给控件后面添加错误显示信息。语句代码:@Html.ValidationMessage("BornDate")

注意:这里用了另外一个辅助方法@Html.ValidationMessage("属性名称"),用来显示指定字段的验证信息。

第五步,运行测试。

数据类型验证

补充内容:在使用验证特性的时候,可以使用占位符

代码说明:

Display特性:用来指定显示属性名的字符串(可以理解为给属性名起一个用户看得懂的别名) 。

占位符{0} :将使用属性名进行替换,如果设置了Diplay特性,就会用 Diplay 的 name 值进行替换。

占位符{1} :将使用 Range 特性里的18,进行替换。

占位符{2} :将使用 Range 特性里的60,进行替换。

理解一下代码:这里用的占位符为什么这样写?此时的占位符{0},对应的值将会是什么?

 

3、自定义服务器端验证

如果 ASP.NET MVC 提供的验证特性无法满足需求,比如在项目的注册用户模块中,经常要求注册的用户名在数据库中不存在,就需要进行自定义验证。

ASP.NET MVC 支持自定义验证。实现自定义验证,一般是通过继承 ValidationAttribute 类,编写服务器端的验证规则;如果想实现客户端验证,就需要实现 IClientValidatable 接口。所有的自定义验证属性类最终都派生自基类ValidationAttribute ,这是一个抽象类,定义在命名空间 System.ComponentModel.DataAnnotations 中。 

本次将重点讲解自定义服务器端验证。服务端验证要继承 ValidationAttribute,并重写 IsValid 虚方法来自定义自己的验证规则。

ValidationAttribute 类成员如以下代码所示:

public abstract class ValidationAttribute : Attribute
{ 
     //验证失败提示消息
     public virtual string FormatErrorMessage(string name); 
     //自定义验证一
     protected virtual ValidationResult IsValid(object value, ValidationContext validationContext); 
     //自定义验证二
     public virtual bool IsValid(object value); 
 }

示例练习9:要求新注册的的用户名不能和数据库里的数据重复

自定义验证-服务器端验证

第一步,添加 CheckNameAttribute 类。在项目资源管理器中,右键单击Models文件夹,依次点击【添加】→【类】,并给类起名为“CheckNameAttribute.cs”,然后单击【添加】按钮。

第二步,让新添加的类继承 ValidationAttribute 抽象类。方法:在类名后面使用英文冒号+父类名称,实现继承。需要引用命名空间 using System.ComponentModel.DataAnnotations;

第三步,在 CheckNameAttribute 类中重写 IsValid 方法。(为了实现验证逻辑,属性类中最少需要重写基类中的 IsValid 方法)

关键代码:

        //编写验证规则,value代表验证的值
        public override bool IsValid(object value)
        {
            bool flag = false; //默认验证失败
            if (value != null)//if判断,如果不为空,则验证是否和数据库的信息重复
            {
                string checkName = value.ToString();//将参数(用户输入的信息),转换成string类型以后,存储到变量中
                //创建集合保存现有的员工名称,模拟数据库操作
                List<string> names = new List<string>() { "张三", "李四", "王五", "赵六" };
                //创建一个linq查询
                var linq = from item in names
                           where item == checkName
                           select item;
                if (linq.Count() == 0)
                {
                    flag = true;//验证成功
                }
            }
            return flag;
        }

第四步,给 userName 属性添加自定义验证特性。打开 RegisterModel.cs 文件,在类中,在 userName 属性前,添加代码。[CheckName(ErrorMessage="用户名已存在")]

 

 

4、扩展验证特性

如果相同的规则需要重复设置,例如,验证手机号码不只在公司员工类,在客户类、供货商类等中都需要重复设置,那么验证手机格式的正则表达式将会不断重复,我们可以通过扩展验证特性 RegularExpression 来解决此问题。

示例练习10:增加员工手机属性并添加验证特性

扩展验证特性

第一步,添加 PhoneAttribute 在项目资源管理器中,右键单击Models文件夹,依次点击【添加】→【类】,并给类起名为“PhoneAttribute.cs”,然后单击【添加】按钮。

第二步,让新添加的类继承 RegularExpressionAttribute 抽象类。方法:在类名后面使用英文冒号 + 父类名称,实现继承。需要引用命名空间 using System.ComponentModel.DataAnnotations;

第三步,给 PhoneAttribute 类添加一个构造函数在类中编写代码。

    public class PhoneAttribute : RegularExpressionAttribute
    {
        //构造方法
        public PhoneAttribute()//构造方法必须与类名相同,且没有返回类型
            : base("(13|15|18|17)\\d{9}")//使用base,表示调用父类的构造方法
        {
            ErrorMessage = "手机号码必须是13、15、18或者17开头的11位纯数字字符串";
        }
    }

第四步,在 RegisterModel 类中添加 Phone 属性,并注解 PhoneAttribute 特性,实现验证。打开 RegisterModel.cs 文件,编写代码。

第五步,在视图 Index.cshtml 中增加文本框,供用户输入手机号码。<p>手机号码:@Html.TextBox("Phone")@Html.ValidationMessage("Phone")</p>

 

本次内容总结:

  • ASP.NETMVC 中引入 System.ComponentModel.DataAnnotations 命名空间来实现数据验证的功能。
  • ASP.NET 中常见的验证特性包括 RequiredCompareStringLengthRangeRegularExpression 等。
  • 在模型类中定义验证规则后,ASP.NET MVC 在将表单提交的数据绑定到模型时,会自动应用模型类上的验证规则。
  • Html.ValidationSummary 方法可以在页面上集中输出验证信息。
  • @Html.ValidationMessage 方法可以在页面上输出单个验证信息。
  • 自定义服务端验证时,需要继承 ValidationAttribute 类,并重写 IsValid 虚方法来自定义自己的验证规则。
  • 继承现有的验证特性如 RangeAttribute RegularExpressionAttribute 等,可以扩展验证功能。
  • 数据验证在模型绑定时自动完成,使用 ModelState.IsValid 可判断服务器端验证结果。

 

========这里是结束分割线==========

 

 

 

 

 

 

  • 1
    点赞
  • 3
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

asp.net mvc 3高级编程》 第1章 入门 1 1.1 asp.net mvc简介 1 1.1.1 asp.net mvc如何适应asp.net 1 1.1.2 mvc模式简介 2 1.1.3 mvc在web框架中的应用 2 1.1.4 asp.net mvc 3的发展历程 3 1.1.5 razor视图引擎 5 1.1.6 验证的改善 8 1.1.7 强大的javascript支持 9 1.1.8 高级功能 9 1.1.9 asp.net mvc 3特性总结 10 1.2 创建asp.net mvc 3应用程序 10 1.2.1 创建asp.net mvc 3应用程序的软件要求 11 1.2.2 安装asp.net mvc 3 11 1.2.3 创建asp.net mvc 3应用程序 12 1.2.4 new asp.net mvc 3 project对话框 13 1.3 asp.net mvc应用程序的结构 17 1.4 小结 20 第2章 控制器 21 .2.1 控制器的角色 21 2.2 控制器简史 22 2.3 示例应用程序mvc music store 23 2.4 控制器基础 26 2.4.1 简单示例home controller 26 2.4.2 创建第一个(非常简单的)控制器 29 2.4.3 控制器操作中的参数 31 2.5 小结 33 第3章 视图 35 3.1 视图的作用 36 3.2 指定视图 38 3.3 强类型视图 39 3.4 视图模型 41 3.5 添加视图 42 3.5.1 add view对话框中的选项 42 3.5.2 自定义t4视图模板 45 3.6 razor视图引擎 46 3.6.1 razor的概念 46 3.6.2 代码表达式 48 3.6.3 html编码 50 3.6.4 代码块 51 3.6.5 razor语法示例 52 3.6.6 布局 54 3.6.7 viewstart 56 3.7 指定分部视图 57 3.8 视图引擎 58 3.8.1 配置视图引擎 58 3.8.2 查找视图 59 3.8.3 视图本身 60 3.8.4 其他的视图引擎 61 3.9 新的视图引擎还是新的actionresult 62 3.10 小结 63 第4章 模型 65 4.1 为mvc music store建模 65 4.2 为商店管理器构造基架 68 4.2.1 基架的概念 68 4.2.2 基架和实体框架 69 4.2.3 执行基架模板 71 4.2.4 执行基架代码 75 4.3 编辑专辑 78 4.3.1 创建编辑专辑的资源 79 4.3.2 响应编辑时的post请求 81 4.4 模型绑定 83 4.4.1 defaultmodelbinder 84 4.4.2 模型绑定安全性简介 85 4.4.3 显式模型绑定 85 4.5 小结 86 第5章 表单和html辅助方法 89 5.1 表单的使用 89 5.1.1 action和method特性 90 5.1.2 get方法还是post方法 90 5.2 html辅助方法 94 5.2.1 自动编码 95 5.2.2 辅助方法的使用 95 5.2.3 html辅助方法的工作原理 96 5.2.4 设置专辑编辑表单 97 5.2.5 添加输入元素 98 5.2.6 辅助方法模型和视图数据 102 5.2.7 强类型辅助方法 104 5.2.8 辅助方法和模型元数据 105 5.2.9 模板辅助方法 105 5.2.10 辅助方法和modelstate 106 5.3 其他输入辅助方法 107 5.3.1 html.hidden 107 5.3.2 html.password 107 5.3.3 html.radiobutton 107 5.3.4 html.checkbox 108 5.4 渲染辅助方法 108 5.4.1 html.actionlink和html.routelink 109 5.4.2 url辅助方法 110 5.4.3 html.partial和html.renderpartial 110 5.4.4 html.action和html.renderaction 111 5.5 小结 113 第6章 数据注解和验证 115 6.1 为验证注解订单 116 6.1.1 验证注解的使用 117 6.1.2 自定义错误提示消息及其本地化 121 6.1.3 注解的后台原理 122 6.1.4 控制器操作和验证错误 123 6.2 自定义验证逻辑 125 6.2.1 自定义注解 125 6.2.2 ivalidatableobject 128 6.3 显示和编辑注解 129 6.3.1 display 130 6.3.2 scaffoldcolumn 130 6.3.3 displayformat 131 6.3.4 readonly 131 6.3.5 datatype 132 6.3.6 uihint 132 6.3.7 hiddeninput 132 6.4 小结 132 第7章 应用程序的安全性 133 7.1 使用authorize特性登录 135 7.1.1 保护控制器操作 135 7.1.2 authorize特性在表单身份验证accountcontroller控制器中的用法 139 7.1.3 intranet application模板中的windows authentication 141 7.1.4 整个控制器的安全性 141 7.2 要求角色成员使用authorize特性 142 7.3 扩展角色和成员 143 7.4 web应用程序中的安全向量 143 7.4.1 威胁跨站脚本 144 7.4.2 威胁跨站请求伪造 154 7.4.3 威胁cookie盗窃 158 7.4.4 威胁重复提交 160 7.4.5 威胁开放重定向 162 7.5 适当的错误报告和堆栈跟踪 170 7.5.1 使用配置转换 171 7.5.2 使用retail部署配置 172 7.5.3 使用专门的错误日志系统 172 7.6 安全回顾和有用资源 172 7.7 小结 173 第8章 ajax 175 8.1 jquery 175 8.1.1 jquery的特性 176 8.1.2 非侵入式javascript 179 8.1.3 jquery的用法 180 8.2 ajax辅助方法 183 8.2.1 ajax的actionlink方法 183 8.2.2 html 5特性 185 8.2.3 ajax表单 186 8.3 客户端验证 188 8.3.1 jquery验证 189 8.3.2 自定义验证 190 8.4 辅助方法之外 194 8.4.1 jquery ui 194 8.4.2 使用jquery ui实现自动完成部件 195 8.4.3 json和jquery模板 199 8.5 提高ajax性能 204 8.5.1 使用内容分发网络 204 8.5.2 脚本优化 204 8.6 小结 205 第9章 路由机制 207 9.1 理解url 208 9.2 路由机制概述 209 9.2.1 对比路由和url重写 209 9.2.2 路由的定义 209 9.2.3 命名路由 217 9.2.4 mvc区域 219 9.2.5 catch-all参数 220 9.2.6 段中的多个url参数 221 9.2.7 stoproutinghandler和ignoreroute 222 9.2.8 路由的调试 223 9.2.9 揭秘路由如何生成url 224 9.3 揭秘路由如何绑定到操作 230 9.3.1 高层次请求的路由管道 230 9.3.2 路由数据 230 9.4 自定义路由约束 231 9.5 web forms和路由机制 232 9.6 小结 233 第10章 nuget 235 10.1 nuget概述 235 10.2 nuget安装 236 10.3 以包的形式添加库 238 10.3.1 查找包 239 10.3.2 安装包 240 10.3.3 更新包 242 10.3.4 最近使用的包 243 10.4 创建包 245 10.4.1 文件夹结构 246 10.4.2 nuspec文件 246 10.4.3 元数据 247 10.4.4 依赖库 248 10.4.5 指定要包含的文件 249 10.4.6 工具 249 10.4.7 框架和轮廓定位 252 10.5 发布包 253 10.5.1 发布到nuget.org 253 10.5.2 使用nuget.exe发布包 256 10.5.3 包浏览器的用法 257 10.5.4 托管私有的nuget供应库 258 10.6 小结 261 第11章 依赖注入 263 11.1 软件设计模式概述 263 11.1.1 设计模式—— 控制反转模式 264 11.1.2 设计模式—— 服务定位器 266 11.1.3 设计模式—— 依赖注入 270 11.2 依赖解析器的用法 272 11.2.1 单一注册服务 274 11.2.2 复合注册服务 275 11.2.3 创建任意对象 278 11.3 小结 280 第12章 单元测试 281 12.1 单元测试和测试驱动开发的意义 282 12.1.1 单元测试的定义 282 12.1.2 测试驱动开发的定义 283 12.2 创建单元测试项目 286 12.2.1 检查默认单元测试 287 12.2.2 只测试自己编写的代码 290 12.3 单元测试用于asp.net mvc应用程序的技巧和窍门 291 12.3.1 控制器测试 291 12.3.2 路由测试 296 12.3.3 验证测试 298 12.4 小结 302 第13章 扩展asp.net mvc 303 13.1 模型扩展 304 13.1.1 把请求数据转化为模型 304 13.1.2 用元数据描述模型 309 13.1.3 验证模型 312 13.2 视图扩展 315 13.2.1 自定义视图引擎 315 13.2.2 编写html辅助方法 317 13.2.3 编写razor辅助方法 319 13.3 控制器扩展 319 13.3.1 操作选择 319 13.3.2 操作过滤器 321 13.3.3 提供自定义结果 323 13.4 小结 324 第14章 高级主题 325 14.1 高级razor 325 14.1.1 模板化的razor委托 325 14.1.2 视图编译 326 14.2 高级基架 328 14.2.1 自定义t4代码模板 328 14.2.2 nuget包mvcscaffolding 329 14.2.3 更新的add controller对话框选项 329 14.2.4 使用库模板 330 14.2.5 添加基架器 332 14.2.6 额外资源 332 14.3 高级路由 332 14.3.1 routemagic 332 14.3.2 可编辑的路由 333 14.4 模板 337 14.4.1 默认模板 338 14.4.2 自定义模板 342 14.5 高级控制器 344 14.5.1 定义控制器icontroller接口 344 14.5.2 controllerbase抽象基类 346 14.5.3 控制器类和操作 346 14.5.4 actionresult 351 14.5.5 操作调用器 359 14.5.6 使用异步控制器操作 362 14.6 小结 370
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值