程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 登峰造極的ASP.NET - ASP.NET MVC 2中的模型驗證和元數據

登峰造極的ASP.NET - ASP.NET MVC 2中的模型驗證和元數據

編輯:關於ASP.NET

ASP.NET MVC 2 版本新增的一項功能可以驗證服務器和客戶端的用戶輸入。您只需為該框架提供一些 有關要驗證數據的信息,該框架將會為您處理艱巨的工作和詳細信息。

對於我們這些使用 ASP.NET MVC 1.0 編寫自定義驗證代碼和自定義模型綁定器來執行簡單模型驗證的 人來說,此功能可謂天賜福音。在本文中,我將探討 ASP.NET MVC 2 中內置的驗證支持。

不過,在討論這些新功能之前,我將回顧一下舊的方法。多年來,ASP.NET WebForms 中的驗證功能一 直讓我非常滿意。我想,回顧一下這些功能對於理解驗證框架的作用非常有幫助。

控制驗證

您如果用過 ASP.NET WebForms,應當會知道將驗證邏輯添加到 WebForm 中相對簡單。您使用控件表 示驗證規則。例如,如果要確保用戶在 TextBox 控件中輸入特定文本,只需添加一個指向 TextBox 的 RequiredFieldValidator 控件,如下所示:

<form id="form1" runat="server">
  <asp:TextBox runat="server" ID="_userName" />
  <asp:RequiredFieldValidator runat="server" ControlToValidate="_userName"
                 ErrorMessage="Please enter a username" />
  <asp:Button runat="server" ID="_submit" Text="Submit" />
</form>

RequiredFieldValidator 將封裝客戶端和服務器端的邏輯以確保用戶提供的是用戶名。若要提供客戶 端驗證,該控件會將 JavaScript 發送到客戶端浏覽器,此腳本可確保將表單傳回服務器之前用戶操作滿 足所有驗證規則。

想想這些 WebForm 驗證控件提供了什麼,它們的功能的確異常強大!

可以通過聲明方式為一個位置的頁面表示驗證規則。

如果用戶操作不滿足這些驗證規則,客戶端驗證將阻止往返服務器。

服務器驗證將防止惡意用戶避開客戶端腳本。

服務器和客戶端驗證邏輯保持同步,而不會成為維護問題。

但是在 ASP.NET MVC 中,您無法使用這些驗證控件並繼續忠實 MVC 設計模式的精神。幸運的是,此 框架的第 2 版中的一些功能甚至更好。

控件與模型

可以將 WebForm 控件(如 TextBox)視為一個簡單的用戶數據容器。可以用初始值填充此控件,並向 用戶顯示該值,也可以在回發後通過檢查該控件來檢索用戶輸入或編輯的任何值。使用 MVC 設計模式時 ,M(模型)與數據容器扮演著相同的角色。可以用需要提供給用戶的信息來填充模型,它會將更新的值 回送到您的應用程序。因此,模型是表示驗證規則和約束的一個理想場所。

下面是一個現成的示例。如果創建一個新的 ASP.NET MVC 2 應用程序,您將在新項目中找到一個控制 器 AccountController。該控制器負責處理新用戶的注冊請求,以及登錄和密碼更改請求。其中每個操作 都使用一個專用的模型對象。可以在 Models 文件夾中的 AccountModels.cs 文件中找到這些模型。例如 ,不帶驗證規則的 RegisterModel 類如下所示:

public class RegisterModel
{
  public string UserName { get; set; }
  public string Email { get; set; }
  public string Password { get; set; }
  public string ConfirmPassword { get; set; }
}

AccountController 的 Register 操作將此 RegisterModel 類的實例用作參數:

[HttpPost]
public ActionResult Register(RegisterModel model)
{
   // ...
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved