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


今天在一個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, true);

    if (!isValid)
    {
        return Content(string.Join("<br/>", results.Select(x => x.ErrorMessage)));
    }
    else
    {
        return Content("OK");
    }     
}

執行結果:

Title 字段是必需的。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM