ASP.NET MVC3+EF4+Oracle入門執行個體(九)

來源:互聯網
上載者:User

添加模型驗證

這一節我們將為Movie模型添加驗證邏輯,並且確保驗證規則在使用者試圖建立或者編輯一個movie時始終有效執行。

我們首先要添加對“System.ComponentModel.DataAnnotations”命名空間的引用,它是.NET Framework中的一個命名空間。它提供了很多內建的驗證規則,你可以對任何類或屬性顯式指定這些驗證規則。

由於我們的模型類MOVIE是由Entitiy Framework自動產生的,我們不適合手動去編輯,這樣容易導致項目編譯出錯,但是我們的模型驗證是在模型的基礎上添加驗證規則的,這看起來是個兩難的境地。我們先看看Entity Framework給我們產生的MOVIE到底是怎樣的,如下所示:

我們可以看到,MOVIE是個Partial類!這意味著我們可以使用同樣的方法定義另外一個Partial類,然後對這個部分類進行擴充添加驗證邏輯。.NET在運行時會把多個Partial標識的相同類名的類一起編譯成一個類,但是必須確保所有的部分類在同樣的命名空間下!

我們在DAL檔案夾下建立一個類MovieValidation.cs,然後編寫如下代碼:

using System;using System.ComponentModel.DataAnnotations;namespace MvcMovie.DAL{    [MetadataType(typeof(MovieValidation))]    public partial class MOVIE    {        public MOVIE()        {        }        public class MovieValidation        {                  [Required(ErrorMessage = "Title is required")]            public string TITLE { get; set; }                  [Required(ErrorMessage = "Date is required")]            public DateTime RELEASEDATE { get; set; }                  [Required(ErrorMessage = "Genre must be specified")]            public string GENRE { get; set; }                  [Required(ErrorMessage = "Price Required")]                  [Range(1, 100, ErrorMessage = "Price must be between $1 and $100")]            public decimal PRICE { get; set; }             }    }}

修改完成後儲存文檔,重新運行程式並且導航到

http://localhost:xxx/Movies/Create。

不輸入任何東西,點擊“Create”按鈕,然後您就可以看到我們之前設定的驗證規則生效了。

我們可以看到Visual Studio使用預設的CSS樣式為我們顯示出了錯誤資訊。這些錯誤資訊就是我們之前在模型的屬性上設定的,並且這也驗證是同時在用戶端和伺服器端執行的,即使我們瀏覽器禁用了JS指令碼,我們還有伺服器端驗證,也就是說我們在模型屬性上設定的驗證規則可以在多個地方多次使用,這正是DRY(Don't Repeat Yourself)的具體實現。我們可以查看網頁源檔案:

<div class="editor-field">            <input class="text-box single-line" data-val="true" data-val-number="欄位 PRICE 必須是一個數字"data-val-range="Price must be between $1 and $100" data-val-range-max="100" data-val-range-min="1" data-val-required="Price Required" id="PRICE" name="PRICE" type="text" value="" />            <span class="field-validation-valid" data-valmsg-for="PRICE" data-valmsg-replace="true"></span> </div>

可以看到MVC為我們自動產生了驗證指令碼,其中"data-val”、"data-val-number”是jquery.validate.unobtrusive.min.js的文法,這個js檔案時微軟自己封裝的JS庫。

還有一個重要的好處就是您不需要修改MoviesController類以及Create.Cshtml中的任何一行代碼就實現了UI層的資料驗證。

關於這個驗證過程是如何?的請查看其他資訊:點擊查看

為Movie模型添加顯示格式化

有時候我們需要為模型的屬性的顯示和資料類型進行格式化,System.ComponentModel.DataAnnotations命名空間提供了格式化的支援,下面我們來具體操作。

修改我們之前建立的MovieValidation.cs類如下所示,我們添加了RELEASEDATE和PRICE的顯示格式:

using System;using System.ComponentModel.DataAnnotations;namespace MvcMovie.DAL{    [MetadataType(typeof(MovieValidation))]    public partial class MOVIE    {        public MOVIE()        {        }        public class MovieValidation        {            [Required(ErrorMessage = "Title is required")]            public string TITLE { get; set; }            [Required(ErrorMessage = "Date is required")]            [DisplayFormat(DataFormatString = "{0:d}")]             public DateTime RELEASEDATE { get; set; }            [Required(ErrorMessage = "Genre must be specified")]            public string GENRE { get; set; }             [Required(ErrorMessage = "Price Required")]            [DisplayFormat(DataFormatString = "{0:c}")]             [Range(1, 100, ErrorMessage = "Price must be between $1 and $100")]            public decimal PRICE { get; set; }             }    }}

我們發現圖中兩個欄位的資料已經被格式化顯示了。

到目前為止,我們已經完成了一個Asp.net MVC3的入門級執行個體,如果您想瞭解更多的資訊請訪問:

ASP.NET MVC官方網站教程:http://www.asp.net/mvc/tutorials

ASP.NET MVC 3快速入門:

http://blog.csdn.net/qwlovedzm/article/details/6313487

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.