验证是ASP.NET MVC应用程序中的重要方面,用于检查用户输入是否有效,ASP.NET MVC提供了一组易于使用的验证,同时,它还是一种检查错误并在必要时向用户显示消息的有效方法。
向模型添加验证
从上一章开始,让我们来看一个简单的验证示例,在此示例中,我们将向模型类添加数据注释,该模型类提供了一些内置的验证属性集,可以直接将其应用于应用程序中的任何模型类或属性,如 Required,StringLength,RegularExpression,和 Range 验证属性。
它还包含诸如DataType之类的格式化属性,这些属性有助于格式化并且不提供任何验证,验证属性指定您要对应用它们的模型属性强制实施的行为。
Required和MinimumLength属性指示属性必须具有值,但没有什么可以阻止用户输入空格来满足此验证要求,RegularExpression属性用于限制可以输入的字符。
让我们通过添加不同的注释属性来更新Employee类,如以下代码所示。
using System;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
namespace MVCSimpleApp.Models {
public class Employee{
public int ID { get; set; }
[StringLength(60, MinimumLength = 3)]
</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> </span><span class="typ">Name</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">get</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="pun">[</span><span class="typ">Display</span><span class="pun">(</span><span class="typ">Name</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Joining Date"</span><span class="pun">)]</span><span class="pln">
</span><span class="pun">[</span><span class="typ">DataType</span><span class="pun">(</span><span class="typ">DataType</span><span class="pun">.</span><span class="typ">Date</span><span class="pun">)]</span><span class="pln">
</span><span class="pun">[</span><span class="typ">DisplayFormat</span><span class="pun">(</span><span class="typ">DataFormatString</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"{0:yyyy-MM-dd}"</span><span class="pun">,</span><span class="pln">
</span><span class="typ">ApplyFormatInEditMode</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">)]</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="typ">DateTime</span><span class="pln"> </span><span class="typ">JoiningDate</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">get</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="pun">[</span><span class="typ">Range</span><span class="pun">(</span><span class="lit">22</span><span class="pun">,</span><span class="pln"> </span><span class="lit">60</span><span class="pun">)]</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> </span><span class="typ">Age</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">get</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
}
}
现在我们还需要为数据库设置限制。但是,SQL Server对象Explorer中的数据库显示name属性设置为NVARCHAR(MAX),如以下屏幕快照所示。

为了对数据库设置此限制,我们将使用迁移来更新架构。
从Tools→NuGet Package Manager→Package Manager Console 中打开软件包管理器控制台窗口。

在 Package Manager控制台窗口中一个接一个地输入以下命令。
Enable-Migrations add-migration DataAnnotations update-database
以下是在"Package Manager Console"窗口中执行这些命令之后的日志。

Visual Studio还将打开从DbMIgration类派生的类,您可以在其中查看 Up 方法中更新架构约束的代码。
namespace MVCSimpleApp.Migrations {
using System;
using System.Data.Entity.Migrations;
public partial class DataAnnotations : DbMigration{
public override void Up(){
AlterColumn("dbo.Employees", "Name", c => c.String(maxLength: 60));
}
</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">override</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">Down</span><span class="pun">(){</span><span class="pln">
</span><span class="typ">AlterColumn</span><span class="pun">(</span><span class="str">"dbo.Employees"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Name"</span><span class="pun">,</span><span class="pln"> c </span><span class="pun">=></span><span class="pln"> c</span><span class="pun">.</span><span class="typ">String</span><span class="pun">());</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}
}
"Name"字段的最大长度为60,这是数据库中新的长度限制,如以下快照所示。

运行此应用程序,然后通过指定以下URL http://localhost:63004/Employees/Create 转到"Create"视图。

让我们在这些字段中输入一些无效数据,然后点击创建按钮,如以下屏幕截图所示。

您将看到jQuery客户端验证检测到该错误,并且还会显示一条错误消息。