日期:2014-05-17 浏览次数:21047 次
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); }
运行程序,然后就可以在前台页面修改一些值,看到验证效果