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);
}
運行程序,然後就可以在前臺頁面修改一些值,看到驗證效果