国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 網(wǎng)站 > 建站經(jīng)驗(yàn) > 正文

ASP.NET MVC 5 - 給數(shù)據(jù)模型-添加校驗(yàn)器

2019-11-02 14:26:13
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  在本節(jié)中將會(huì)給Movie模型添加驗(yàn)證邏輯。并且確保這些驗(yàn)證規(guī)則在用戶創(chuàng)建或編輯電影時(shí)被執(zhí)行。

 拒絕重復(fù) DRYASP.NET MVC 的核心設(shè)計(jì)信條之一是DRY: "不要重復(fù)自己(DRY --Don’t Repeat Yourself)"。ASP.NET MVC鼓勵(lì)您指定功能或者行為,只做一次,然后將它應(yīng)用到應(yīng)用程序的各個(gè)地方。這可以減少您需要編寫的代碼量,并減少代碼出錯(cuò)率,易于代碼維護(hù)。 給ASP.NET MVC 和 Entity Framework Code First 提供驗(yàn)證支持是 DRY 信條的一次偉大實(shí)踐。您可以在一個(gè)地方 (模型類) 中以聲明的方式指定驗(yàn)證規(guī)則,這個(gè)規(guī)則會(huì)在應(yīng)用程序中的任何地方執(zhí)行。 讓我們看看您如何在本電影應(yīng)用程序中,使用此驗(yàn)證支持。 給電影模型添加驗(yàn)證規(guī)則您將首先向Movie類添加一些驗(yàn)證邏輯。 打開Movie.cs 文件,注意到System.Web 命名空間并未包含System.ComponentModel.DataAnnotations. DataAnnotations提供了一組內(nèi)置的嚴(yán)重屬性,可供您應(yīng)用于類、屬性。(DataAnnotations也包含一個(gè)DataType屬性,來(lái)幫助格式化的辦法來(lái)校驗(yàn)) 更新Movie類,以利用內(nèi)置的Required、 StringLength, RegularExpression和Range驗(yàn)證屬性。以下面的代碼為例,以應(yīng)用驗(yàn)證屬性。 復(fù)制代碼public class Movie { public int ID { get; set; } [StringLength(60, MinimumLength = 3)] public string Title { get; set; } [Display(Name = "Release Date")] [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] public DateTime ReleaseDate { get; set; } [RegularExpression(@"^[A-Z]+[a-zA-Z''-'s]*$")] [Required] [StringLength(30)] public string Genre { get; set; } [Range(1, 100)] [DataType(DataType.Currency)] public decimal Price { get; set; } [RegularExpression(@"^[A-Z]+[a-zA-Z''-'s]*$")] [StringLength(5)] public string Rating { get; set; } }復(fù)制代碼  在StringLength屬性設(shè)置字符串的最大長(zhǎng)度,它會(huì)在數(shù)據(jù)庫(kù)上設(shè)置此限制,因此的數(shù)據(jù)庫(kù)schema將發(fā)生變化。右鍵單擊電影表, 在服務(wù)器資源管理器(Server  explorer),然后單擊打開表定義(Open Table Definition): clip_image002 在上面的圖片中,你可以看到所有的字符串字段被設(shè)置為了NVARCHAR  (MAX)數(shù)據(jù)類型.  我們將使用遷移來(lái)更新架構(gòu)。生成解決方案,然后打開軟件包管理器控制臺(tái)(the Package Manager Console ),輸入如下命令: add-migration DataAnno
樂樂影院[www.aikan.tv/special/leleyingyuan/]
tations update-database 當(dāng)這個(gè)命令完成后,Visual Studio將打開類代碼文件,它定義了新DbMIgration派生類(DataAnnotations),你可以在Up方法看到更新架構(gòu)約束代碼如下所示: 復(fù)制代碼public override void Up() { AlterColumn("dbo.Movies", "Title", c => c.String(maxLength: 60)); AlterColumn("dbo.Movies", "Genre", c => c.String(nullable: false, maxLength: 30)); AlterColumn("dbo.Movies", "Rating", c => c.String(maxLength: 5)); }復(fù)制代碼  該流派(Genre)字段不再可為Null(也就是說(shuō),你必須輸入一個(gè)值)。該評(píng)級(jí)(Rating)字段最大長(zhǎng)度為5, 標(biāo)題的最大長(zhǎng)度為60。標(biāo)題(Title )和價(jià)格 (Price)的范圍的最小長(zhǎng)度并沒有更改。 請(qǐng)?jiān)跀?shù)據(jù)庫(kù)中,檢查電影表的schema: clip_image004 該字符串字段顯示新的長(zhǎng)度限制和流派字段(Genre)不能再為空。 驗(yàn)證屬性指明您想要應(yīng)用到模型屬性的行為。Required 和MinimumLength屬性指出某一屬性不可為空,但沒有什么能夠阻止用戶輸入空格來(lái)驗(yàn)證。該RegularExpression屬性是用來(lái)限制哪些字符可以輸入。在上面的代碼中,流派(Genre)和等級(jí)(Rating)只能使用字母(空格,數(shù)字和特殊字符是不允許的)。該范圍(Range )屬性約束的值在一個(gè)指定范圍內(nèi)。在StringLength 屬性允許您設(shè)置一個(gè)字符串屬性的最大長(zhǎng)度,以及最小長(zhǎng)度(可選的)。值類型(decimal, int, float, DateTime)有固有必需設(shè)置的,不需要的Required屬性。 Code First確保你的模型在指定class上在驗(yàn)證規(guī)則強(qiáng)制執(zhí)行之前應(yīng)用程序?qū)⒆兏鼉?chǔ)存在數(shù)據(jù)庫(kù)中。例如,下面的代碼將拋出一個(gè)DbEntityValidationException 異常時(shí),調(diào)用SaveChanges方法時(shí),因?yàn)閹讉€(gè)必要的Movie屬性缺少: 復(fù)制代碼MovieDBContext db = new MovieDBContext(); Movie movie = new Movie(); movie.Title = "Gone with the Wind"; db.Movies.Add(movie); db.SaveChanges(); // <= Will throw server side validation exception復(fù)制代碼  上面的代碼會(huì)拋出以下異常: Validation failed for one or more entities. 參閱  'EntityValidationErrors' 屬性獲得更多信息. 具有通過(guò).NET Framework會(huì)自動(dòng)強(qiáng)制執(zhí)行的驗(yàn)證規(guī)則, 有助于使你的應(yīng)用程序更加健壯。它還確保可以不會(huì)忘記驗(yàn)證的東西,即在不經(jīng)意間不會(huì)讓壞的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)。 ASP.NET MVC 的驗(yàn)證錯(cuò)誤UI重新運(yùn)行應(yīng)用程序,瀏覽 /Movies的 URL。 單擊Create New鏈接,來(lái)添加一部新電影。在窗體中填寫一些無(wú)效值,然后單擊Create按鈕。 如同jQuery的客戶端驗(yàn)證來(lái)檢測(cè)到錯(cuò)誤時(shí),它會(huì)顯示一個(gè)錯(cuò)誤消息。   注意,為了使jQuery支持使用逗號(hào)的非英語(yǔ)區(qū)域的驗(yàn)證 ,需要設(shè)置逗號(hào)(",")來(lái)表示小數(shù)點(diǎn),如本教程前面所述, 你須引入NuGet globalize。請(qǐng)注意,表單在每一個(gè)相應(yīng)的驗(yàn)證錯(cuò)誤消息旁邊,已經(jīng)自動(dòng)使用紅色邊框的顏色突出顯示文本框指明無(wú)效數(shù)據(jù)。這些錯(cuò)誤是強(qiáng)制執(zhí)行了客戶端端(使用JavaScript和jQuery)和服務(wù)器端(如果用戶禁用了JavaScript)。 一個(gè)真正的好處是,你并不需要更改MoviesController類或Create.cshtml視圖中的一行代碼,來(lái)啟用此驗(yàn)證的用戶界面。您在前面教程所創(chuàng)建的控制器和視圖會(huì)自動(dòng)啟用,使用驗(yàn)證指明的Movie model類的屬性。使用Edit行為方法,同樣的驗(yàn)證方法也完全適用。直到?jīng)]有任何客戶端驗(yàn)證錯(cuò)誤的表單數(shù)據(jù),才會(huì)被發(fā)送回服務(wù)器。您可以通過(guò)在HTTP POST方法,用一個(gè)斷點(diǎn)來(lái)驗(yàn)證這一點(diǎn); 或通過(guò)使用fiddler tool,或者IE
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 根河市| 美姑县| 东宁县| 通州市| 晋江市| 安泽县| 合江县| 安图县| 城口县| 泊头市| 肇源县| 新宁县| 天水市| 泽州县| 马边| 蚌埠市| 宣恩县| 商河县| 鄂托克前旗| 福鼎市| 恭城| 宝鸡市| 临海市| 三门县| 连云港市| 镇康县| 富锦市| 西华县| 日土县| 扎赉特旗| 遂宁市| 长葛市| 老河口市| 灵璧县| 贺兰县| 沽源县| 玉环县| 怀化市| 绿春县| 惠州市| 赤水市|