C#中手工進行聲明式驗證,從此遠離if驗證

來源:互聯網
上載者:User

標籤:

今天在一個ASP.NET MVC Controller Action中寫代碼時,需要對ViewModel的欄位進行驗證。但這個Action處理的是手工編寫的ajax請求(不是表單提交),無法使用ASP.NET MVC Validation功能。

MVC Action範例程式碼如下:

public async Task<ActionResult> Save(int? postId, PostModel post){    //驗證post的屬性,比如Titile不可為空}

按照以前的寫法,就要寫if語句進行判斷:

public async Task<ActionResult> Save(int? postId, PostModel post){    if(string.IsNullOrEmpty(post.Title))    {        return Content("Title 欄位是必需的。");    }}

但今天在聲明式驗證的美麗身姿的誘惑下,再也不想寫這樣的累贅代碼,於是採取行動,作出改變。

聲明式驗證只需要在要驗證的ViewModel的欄位上加上相應的聲明,比如針對文中的樣本:

public class PostModel{    [Required]    public string Title { get; set; }}

但現在的代碼情境需要手工觸發這個驗證並且拿到驗證結果,那如何?呢?

。。。

後來在網上找到瞭解決方法——Manual Validation with Data Annotations。

只需調用 System.ComponentModel.DataAnnotations.Validator.TryValidateObject() 就能實現,樣本實現代碼如下:

public async Task<ActionResult> Save(int? postId, PostModel post){    var validationContext = new ValidationContext(post);    var results = new List<ValidationResult>();    var isValid = Validator.TryValidateObject(post, validationContext, results);    if (!isValid)    {        return Content(string.Join("<br/>", results.Select(x => x.ErrorMessage)));    }    else    {        return Content("OK");    }     }

執行結果:

Title 欄位是必需的。

從此可以藉助聲明式驗證讓代碼更漂亮。

C#中手工進行聲明式驗證,從此遠離if驗證

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.