Asp.net MVC 通過Attribute驗證datamodel(一)

1. 除了可以使用Required, StringLength等Attribute,asp.net mvc中還可以自定義屬於自己的驗證Attribute。

例如:

//驗證邏輯就是判斷專輯的Title是否包含某一個關鍵字
    public class AlbumTitleValidateAttribute : ValidationAttribute
    {
        private readonly string _keyword;

        public AlbumTitleValidateAttribute(string keyword)
        {
            if (string.IsNullOrEmpty(keyword))
                throw new Exception("invalid usage");
            _keyword = keyword;
        }

        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            if (value != null && value.ToString().ToUpper().Contains(_keyword.ToUpper()))
            {
                return ValidationResult.Success;
            }
            else
                return new ValidationResult(string.Format("Title does not contain the keyword({0})", _keyword));
        }
    }


 

2.定義DataModel,並且使用上面定義的attribute

public class Album
    {
        public int ID { get; set; }
        [Required]
        [AlbumTitleValidateAttribute("月亮")]
        public string Title { get; set; }
        [Required]
        [StringLength(3)]
        public string Author { get; set; }
    }


這裏定義專輯的Title必須包含有“月亮”二字

 

3. 綁定屬性到前臺頁面

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    <p>
        @Html.EditorFor(m => m.Title)
        @Html.ValidationMessageFor(m => m.Title)
    </p>

    <p>
        @Html.EditorFor(m => m.Author)
        @Html.ValidationMessageFor(m => m.Author)
    </p>

    @Html.HiddenFor(m => m.ID)
                          
    <input type="submit" value="submit" />
}


 

4. 添加Action在Controller.

[HttpPost]
        public ActionResult Index(Album album)
        {
            if (ModelState.IsValid)
            {
                return RedirectToAction("About");
            }
            return View(album);
        }


運行程序,然後就可以在前臺頁面修改一些值,看到驗證效果

發佈了257 篇原創文章 · 獲贊 6 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章