驗(yàn)證是ASP.NET MVC應(yīng)用程序中的一個(gè)重要方面。 它用于檢查用戶輸入是否有效。 ASP.NET MVC提供了一組易于使用的驗(yàn)證,同時(shí)也是檢查錯(cuò)誤并在必要時(shí)向用戶顯示消息的強(qiáng)大方法。
DRY代表(Don’t Repeat Yourself )不要重復(fù)自己,是ASP.NET MVC的核心設(shè)計(jì)原則之一。從開(kāi)發(fā)的角度來(lái)看,鼓勵(lì)只在一個(gè)地方指定功能或行為,然后在整個(gè)應(yīng)用程序中使用它。
這樣可以減少編寫(xiě)的代碼量,使代碼編寫(xiě)起來(lái)更容易,更容易維護(hù)。
下面來(lái)看看,如何為上一章項(xiàng)目添加員工時(shí)驗(yàn)證的一個(gè)簡(jiǎn)單例子。 在這個(gè)例子中,我們將數(shù)據(jù)注釋添加到模型類(lèi),它提供了一些內(nèi)置的驗(yàn)證屬性集,可以直接在應(yīng)用程序中應(yīng)用到任何模型類(lèi)或?qū)傩裕纾?code>Required,StringLength,RegularExpression和Range驗(yàn)證屬性。
它還包含格式化屬性,如DataType幫助格式化,不提供任何驗(yàn)證。 驗(yàn)證屬性指定要對(duì)其應(yīng)用的模型屬性強(qiáng)制執(zhí)行的行為。
Required和MinimumLength屬性指示屬性必須具有值; 但是沒(méi)有任何東西阻止用戶輸入空白格來(lái)滿足這個(gè)驗(yàn)證。RegularExpression屬性用于限制可輸入的字符。
可以通過(guò)添加不同的注釋屬性來(lái)更新 Employee 類(lèi),如以下代碼所示 -
還需要對(duì)數(shù)據(jù)庫(kù)設(shè)置限制。 但是,SQL Server對(duì)象資源管理器中的數(shù)據(jù)庫(kù)顯示name屬性被設(shè)置為NVARCHAR(MAX),如以下截圖所示 -
現(xiàn)在我們還需要對(duì)數(shù)據(jù)庫(kù)設(shè)置限制。 但是,SQL Server對(duì)象資源管理器中的數(shù)據(jù)庫(kù)顯示name屬性被設(shè)置為NVARCHAR(MAX),如以下屏幕截圖所示 -
為了在數(shù)據(jù)庫(kù)上設(shè)置這個(gè)限制,我們將使用遷移來(lái)更新模式。
從 工具 -> NuGet程序包管理器 -> 程序包管理器控制臺(tái) 打開(kāi)程序包管理器控制臺(tái)窗口。
在軟件包管理器控制臺(tái)窗口中逐個(gè)輸入以下命令。
Enable-Migrations
add-migration DataAnnotations
update-database
以下是在 程序包管理器控制臺(tái) 窗口中執(zhí)行這些命令后的日志。
Visual Studio也將打開(kāi)從DbMIgration類(lèi)派生的類(lèi),可以在其中看到更新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));
}
public override void Down(){
AlterColumn("dbo.Employees", "Name", c => c.String());
}
}
}
name字段的最大長(zhǎng)度為60,這是數(shù)據(jù)庫(kù)中新的長(zhǎng)度限制,如以下快照中所示 -
運(yùn)行此應(yīng)用程序并通過(guò)指定以下URL轉(zhuǎn)到創(chuàng)建視圖:http://localhost:63004/Employee/Create -
在這些字段中輸入一些無(wú)效的數(shù)據(jù),然后點(diǎn)擊 創(chuàng)建 按鈕,如下圖所示 -
看到j(luò)Query客戶端驗(yàn)證檢測(cè)到錯(cuò)誤,并且還顯示錯(cuò)誤消息。