日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET MVC 2 验证

發布時間:2024/10/12 asp.net 119 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET MVC 2 验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源:http://www.cnblogs.com/jhxk/articles/2612885.html? 只為把自己覺的好的存起來

對用戶輸入的驗證以及強制業務規則/邏輯是大多數web應用的核心需求。ASP.NET MVC 2包含了一堆新的特性,顯著地簡化了對用戶輸入的驗證以及在模型/視圖模型中對驗證邏輯的強行實施。這些特性是這樣設計的,驗證邏輯總是在服務器上執行的,也可以選擇在客戶端通過JavaScript來執行。ASP.NET MVC 2中的驗證設施和特性這般設計,以便:

1) 開發人員可以輕易地利用內置于.NET框架中的DataAnnotation驗證支持。DataAnnotation提供了一個非常簡便的方式,使用最少的代碼在對象和屬性上用聲明的方式添加驗證規則。

2) 開發人員可以集成他們自己的驗證引擎,或者利用現有的驗證框架,象Castle驗證器或EntLib驗證庫。ASP.NET MVC 2的驗證特性是設計來在利用新的 ASP.NET MVC 2的驗證設施(包括客戶端驗證,模型綁定驗證等等)的同時,簡化任何類型的驗證架構的插入的。

這意味著,在常見的應用場景中啟用驗證是極其容易的,同時對更高級的場景則還能保持極好的靈活性。

使用ASP.NET MVC 2 和 DataAnnotation來啟用驗證

讓我們在ASP.NET MVC 2中來全程示范一個簡單的CRUD場景,利用新的內置DataAnnotation驗證支持。具體來說,讓我們來實現一個“Create”表單來允許用戶輸入朋友的數據:

我們想要確保在保存到數據庫之前,輸入的信息是合法的,如果不合法,就顯示合適的錯誤消息:

我 們想要使得這個驗證同時在服務器端和客戶端(通過 JavaScript)發生。我們還想要確保我們的代碼遵守DRY原則(Don't Repeat Yourself,不重復自己),意味著我們應該只在一處實施驗證規則,然后使得我們的控制器,action方法和視圖來兌現這個承諾。

在下面,我將使用VS 2010,用ASP.NET MVC 2來實現上面的場景。你也可以使用VS 2008及ASP.NET MVC 2來實現完全一樣的場景。

第一步: 實現FriendsController (一開始沒有驗證)

我們首先在一個新的ASP.NET MVC 2項目中加一個簡單的“Person”類,象下面這樣:

它有四個屬性(是用C#的自動屬性支持實現的, 在VS 2010中VB也支持自動屬性了,哎!)。

然后在項目中加一個 “FriendsController” 控制器類,呈示2個 “Create” action方法。第一個action方法是在對/Friends/Create URL的HTTP-GET請求進來時調用的,它會顯示一個空白的表單,用來輸入個人數據。第二個action方法是在對/Friends/Create URL的HTTP-POST請求進來時調用的。它會將提交的表單輸入映射到一個Person對象,核實沒有綁定錯誤發生,如果是合法的,最終會將數據保存 到數據庫中去(在本教程的后面我們會實現相關的數據庫工作)。如果提交的表單輸入是不合法的,該action方法會重新顯示帶有錯誤的表單:

在實現了控制器之后,可以在Visual Studio中在其中一個action方法中右擊,選擇 “添加視圖”命令, 這會調出 “添加視圖” 對話框。選擇自動生成傳入對象為Person的“Create”視圖:

然后Visual Studio會在我們項目的\Views\Friends\目錄中,生成一個含有框架代碼(scaffolded)的Create.aspx視圖文件。注意下面,它利用了ASP.NET MVC 2中新的強類型HTML輔助方法(促成了更好的intellisense和編譯時檢查支持):

現在,當我們運行該應用,訪問 /Friends/Create URL時,我們將得到一張可以輸入數據的空白表單:

但,因為我們還沒有在應用中實現任何驗證,誰也無法阻止我們在表單中鍵入假的輸入,將其提交到服務器去。

第二步: 使用DataAnnotation來啟用驗證

現在,讓我們來更新應用,執行一些基本的輸入驗證規則。我們將在我們的Person模型對象上實現這些規則,而不是在控制器或視圖中實現。在Person對象上實現這些規則的好處是,這將確保這些驗證在應用中任何使用Person對象的場景中都會被執行(例如,如果后來添加了編輯場景的話)。這將幫助確保我們將代碼保持DRY,避免在多處重復這些規則。

ASP.NET MVC 2 允許開發人員輕松地在模型或視圖模型類上添加聲明式驗證特性,然后ASP.NET MVC在應用中實施模型綁定操作時,這些驗證規則就會被自動執行。為看其例子,讓我們更新Person類,在其中加幾個驗證特性。這么做,在文件的頂部加 一個對“System.ComponentModel.DataAnnotations”命名空間的 “using” 語句,然后在Person的屬性上飾于[Required], [StringLength], [Range], 和 [RegularExpression] 驗證特性(這幾個特性都是在那個命名空間中實現的):

注: 在上面我們明式指定了錯誤信息字符串,你也可以在資源文件中定義它們,或者按進來的用戶的語言/文化做本地化,你可以在這里了解如何本地化驗證錯誤消息。

既然我們加了驗證特性到Person類上,讓我們來重新運行我們的應用,看在鍵入假的數值,將其提交回服務器時會發生什么:

注意上面我們的應用現在有一個蠻好的出錯體驗了。帶不合法輸入的文本元素以紅色高亮顯示,我們指定的驗證錯誤消息也顯示給了用戶。表單還保留用戶原先輸入的數據,這樣他們不用重新填寫什么。但,你也許會問,怎么會是這樣?

要理解這個行為,讓我們看一下處理我們表單的POST場景的Create action方法:

在 我們的HTML表單被提交回服務器時,上面的方法就會被調用。因為該action方法接受一個“Person” 對象為參數,ASP.NET MVC會創建一個Person對象,自動地將進來的表單輸入數值映射到該對象上。作為該過程的一部分,ASP.NET MVC還會檢查該Person對象上的DataAnnotation驗證特性是否合法。如果一切都合法,那么我們代碼中的 ModelState.IsValid檢查就會返回真值,在這種情形下,我們(最終)將把該Person對象保存到數據庫中,然后重新定向回到主頁上去。

但如果Person對象上有任何驗證錯誤的話,我們的action方法就會以該不合法Person對象的數據重新顯示表單,這是通過上面代碼片段中最后一行代碼實現的。

然 后,錯誤消息就會顯示在我們的視圖中,因為我們的Create表單在每一個<%= Html.TextBoxFor() %>輔助方法的調用旁邊都有一個<%= Html.ValidationMessageFor() %>輔助方法調用。Html.ValidationMessageFor() 輔助方法會針對傳入視圖的任何不合法的模型屬性輸出合適的錯誤消息:

這個模式/方式有一個好處,就是非常容易配置,它還允許我們輕松地添加或改變我們Person類上的驗證規則,而不必改變控制器或視圖中的任何代碼。這個在一個地方指定驗證規則,然后在所有的地方都會被承諾和遵守的能力,允許我們以最少的努力快速地發展我們的應用和規則,并且將代碼保持在非常DRY的程度。

第三步: 啟用客戶端驗證

目前我們的應用只能做服務器端的驗證,這意味著我們的終端用戶需要將表單提交到服務器才能看到任何驗證錯誤消息。

ASP.NET MVC 2的驗證架構中一樣非常酷的東西是,它同時支持服務器端 和 客戶端驗證。為啟用這個功能,我們要做的就是在視圖中添加2個 JavaScript引用,編寫一行代碼:

在我們添加了這三行后,ASP.NET MVC 2 就會使用我們加到Person類上的驗證元數據,為我們連接好客戶端JavaScript驗證邏輯。這意味著,當用戶使用tab鍵跳出一個不合法的輸入元素時,就會得到瞬時的驗證錯誤。

要在我們的朋友應用中看客戶端JavaScript支持的實戰例子的話,讓我們重新運行應用,在前三個文本框中填入合法的數值,然后嘗試點擊“Create(創建)”。注意,我們不必訪問服務器就會得到遺漏值的瞬時錯誤消息:

如果我們輸入一些不是合法的email的字符話,錯誤消息就會瞬時從“Email Required (Email是個必需值)” 變為 “Not a valid email (email不合法)”(這是我們將規則加到Person類上時指定的錯誤消息):

在輸入一個合法的email時,錯誤消息就是瞬時消失,文本框背景色也會恢復到正常的狀態:

好事是,我們不必編寫自己的任何定制JavaScript就能啟用上面的驗證邏輯。我們的驗證代碼還是那么DRY,我們可以在一個地方指定規則,然后在整個應用中得到執行,同時在客戶端和服務器端。

注意,為安全的原因,服務器端驗證規則總是執行的,即時你啟用了客戶端支持。這避免黑客嘗試繞過客戶端規則,哄騙攻擊(spoof)你的服務器。

ASP.NET MVC 2中的客戶端JavaScript驗證支持可與你在ASP.NET MVC應用中使用的任何驗證框架/引擎協作,它并不要求你使用 DataAnnotation 驗證方式,所有的基礎設施是獨立于 DataAnnotation的,可以與Castle驗證器, EntLib驗證應用塊,或你選擇使用的任何定制驗證方案協作使用。

如果你不想使用我們的客戶端JavaScript文件,你也可以將其替換成jQuery驗證插件,而使用那個庫。 ASP.NET MVC Futures下載還包括針對ASP.NET MVC 2服務器端驗證框架啟用jQuery驗證的支持。

第四步: 創建自定義的[Email]驗證特性

.NET 框架中的System.ComponentModel.DataAnnotations命名空間包括了眾多可為你所用的內置驗證特性。我們在上面的例子中 使用了其中的四個:[Required], [StringLength], [Range], 和 [RegularExpression]。

你 也可以定義自己的定制驗證特性,然后應用它們。你可以通過繼承自System.ComponentModel.DataAnnotations命名空間中 的ValidationAttribute基類,定義完全定制的特性。或者,你也可以選擇繼承自任何現有的驗證特性,如果你只想要擴展它們的基本功能的 話。

例如,為幫助清理我們Person類中的代碼,我們也許想要創建一個新的[Email]驗證特性,將檢查合法email的正則表達 式封裝起來。要這么做的話,我們只要象這樣繼承自RegularExpressionAttribute基類,然后用合適的email正則表達式調用 RegularExpressionAttribute基類的構造器:

然后將Person類更新成使用我們新的[Email]驗證屬性,換掉我們先前使用的正則表達式,這使得我們的代碼更干凈,封裝也更好:

在創建定制的驗證特性時,你還可以指定在服務器端以及在客戶端通過JavaScript執行的驗證邏輯。

除 了創建可施用于對象上個別屬性的驗證特性外,你還可以將驗證特性施用于類的層次,這允許你對一個對象中的多個屬性實施驗證邏輯。要看實戰例子的話,你可以 參閱包含在默認ASP.NET MVC 2應用項目模板中AccountModels.cs/vb文件中的“PropertiesMustMatchAttribute” 定制特性(在VS 2010中做 文件->新ASP.NET MVC 2 Web項目,然后查詢該類)。

第五步: 持久化到數據庫中

現在讓我們來實現將朋友數據保存到數據庫所需的邏輯。

至 此,我們只用了平白的(plain-old)C#類(有時稱為“POCO” 類, 即 “plain old CLR (or C#) object”)。我們可以使用的一個方案是,編寫一些單獨的持久代碼,將這我們已經編寫好的現有類映射到數據庫去。目前象NHibernate這樣的對 象關系映射(Object relational mapping - ORM)方案非常地好支持這樣的POCO/PI風格的映射。隨.NET 4發布的ADO.NET實體框架(Entity Framework - EF)也支持POCO / PI映射,而且就象NHibernate,EF也能啟用以“只用代碼(code only)”的方式(沒有映射文件,也不需要設計器)定義持久性映射的能力。

如果我們的Person對象以這種方式映射到數據庫的話,我們不用對Person類做任何改動,也不用改動任何驗證規則,它還會繼續完好地工作。

但假如我們要使用圖形工具來做ORM映射的話,怎么辦?

今天使用Visual Studio的許多開發人員并不編寫他們自己的ORM映射/持久邏輯,而是使用Visual Studio中內置的設計器來幫助管理這樣的映射邏輯。

使 用DataAnnotation(或者任何其他形式的基于特性的驗證)時一個經常問起的問題是,“如果你手頭的模型對象是由GUI設計器創建/維護的話, 你該如何施用這些特性?”。例如,假如與類似我們至此為止一直在使用的POCO風格的Person類不同,我們而是在Visual Studio中通過象LINQ to SQL 或 ADO.NET EF設計器這樣的GUI映射工具定義/維護我們的Person類的話,該怎么辦呢:

上 面是一張屏幕截圖,展示了在VS 2010中使用ADO.NET EF設計器定義的一個Person類。上方的窗口定義了Person類,下方的窗口展示了該類的屬性是如何映射到數據庫中的“People”表的映射編輯 器。當你在設計器上點擊保存時,它會自動為你在項目中生成一個Person類。這很棒,但每次你做了改動,點擊保存時,它就會重新生成 Person 類,這會導致你在對象上面聲明的任何驗證特性的丟失。

將 額外的基于特性的元數據(象驗證特性)施加到由VS設計器自動生成/維護的類的一個方法是,采用一個我們稱之為“伙伴類(buddy classes)”的技術。基本上來說,你創建另外一個類,包含你的驗證特性和元數據,然后通過將 “MetadataType”特性施加到一個與工具生成的類一起編譯的partial類上,將其與由設計器生成的類連接起來。例如,如果我們想要將我們前 面用到的驗證規則施加到由LINQ to SQL 或 ADO.NET EF設計器維護的Person類上,我們可以更新我們的驗證代碼,使其存在于一個單獨的“Person_Validation”類上,使用象下面這樣的代 碼將其連接到由VS創建的“Person”類上:

上面的做法沒有純粹的POCO方法那么優雅,但其好處是,可以用于Visual Studio中任何工具或設計器生成的代碼。

最后一步 – 將Friend保存到數據庫中

最后一步,不管是否采用了POCO或工具生成的Person類,是將合法的朋友數據保存到數據庫中去。

這只要求我們用三行代碼將FriendsControlle類中的 “Todo”占位語句替換掉,這三行代碼將新朋友保存到數據庫。下面是整個FriendsController類的完整代碼(使用了ADO.NET EF做數據庫持久化):

現在,當我們訪問 /Friends/Create URL時,我們可以輕松地添加新人到我們的朋友數據庫中去:

對所有數據的驗證都是同時在客戶端和服務器端執行的。我們可以輕易地在一個地方添加/修改/刪除驗證規則,而由整個應用中的所有的控制器和視圖來執行這些規則。

結語

ASP.NET MVC 2極大地簡化了web應用的驗證集成。它倡議一種基于模型的驗證方式,允許你將你的應用保持DRY,幫助確保驗證規則在整個應用中保持一致。 ASP.NET MVC 2中內置的DataAnnotation支持,原本就使得對常見的驗證場景的支持非常容易。而且,ASP.NET MVC 2驗證設施中的擴展性支持允許你支持更大范圍的更高級的驗證場景,可以插入任何現有的或者定制的驗證框架/引擎。

轉載于:https://www.cnblogs.com/99app/p/3498472.html

總結

以上是生活随笔為你收集整理的ASP.NET MVC 2 验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。