Asp.NetMVC Attribute検証datamodel(一)


1.Required,StringLength等のAttribute,aspを用いることができる.Netmvcでは、独自の認証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.ControllerにActionを追加する.
[HttpPost]
        public ActionResult Index(Album album)
        {
            if (ModelState.IsValid)
            {
                return RedirectToAction("About");
            }
            return View(album);
        }

プログラムを実行すると、フロントページで値を変更して検証効果を見ることができます.