一、不修改EF自動生成類,添加註解校驗
/// <summary>
/// 用戶 視圖校驗類
/// </summary>
internal class UsersMetadata
{
[Display(Name = "姓名")]
[Required(AllowEmptyStrings = false, ErrorMessage = "姓名不能爲空")]
public string Name { get; set; }
[Display(Name = "手機號碼")]
[Required(AllowEmptyStrings = false, ErrorMessage = "手機號碼不能爲空")]
public string Mobile { get; set; }
}
[MetadataType(typeof(UsersMetadata))]
public partial class Users
{
}
控制器後臺代碼: /// <summary>
/// 確定用戶新增
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public ContentResult UsersAdd(Users model)
{
string flag = "0";
if (ModelState.IsValid)
{
#region 用戶新增
UsersBLL bll = new UsersBLL();
model.RegisterDate = DateTime.Now;//註冊日期
flag = bll.Insert(model).ID > 0 ? "1" : "0";
#endregion
}
return Content(flag);
}
二、基本校驗使用
StringLength特性-限制長度
這個特性看它命名規則就知道它是什麼意思了,字符串長度對吧。是的你沒看錯,就是字符串長度。實例代碼:
[StringLength(20,ErrorMessage = "密碼不能超過20個字符")] public string Password { get; set; }
我們只需要在模型屬性上加上這麼個特性,那麼校驗的時候這個字符串不能超過20個字符。ErrorMessage就是校驗不通過時的消息。
Required特性-不能爲空
這個特性表必須的、不能爲空的。用於不爲空校驗。默認爲不允許爲空。允許爲空則添加AllowEmptyStrings = true
[Required(ErrorMessage = "密碼不能超過20個字符")] public string Password { get; set; }
RegularExpression-規則校驗(正則校驗)
正則表達式在校驗中是必不可少的一部分、微軟也爲我們提供了這個類型,非常方便的使用。
[RegularExpression(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", ErrorMessage = "郵箱不正確")] public string Email { get; set; }
Range-數值範圍
當對一個數值進行校驗時、一般可能會用到取值範圍。比如年齡:
[Range(0,120,ErrorMessage = "年齡取值範圍0-120")] public int Age { set; get; }
Compare-比較
比較兩個值是否一致,一般用於二次輸入。Password是需要比較的值
[Compare("Password",ErrorMessage = "兩次輸入不一致")] public string PasswordConfirm { get; set; }
Remote-遠程校驗
這個在登錄的時候用的非常多。比如你的用戶名ID是否已經被註冊,這是需要從數據庫查詢之後才知道的。這個類有些特殊,它不在System.ComponentModel.DataAnnotations命名空間下,它是在System.Web.Mvc;命名空間下的。
[Remote("CheckUserName","Register",ErrorMessage = "用戶名已被註冊")] public string UserName { get; set; }
Action:代表你要請求的方法
Controller:表示你要請求的控制器
這個特性有一個約定,就是你請求的這個路徑必須返回True或False,並且是以Json格式返回的。至於返回True或False的邏輯,看大家自己的需求了。
public ActionResult CheckUserName() { return Json(false, JsonRequestBehavior.AllowGet); }
Display-顯示名稱
這個特性、個人認爲不屬於校驗裏面的一部分,它只是用戶前臺展示時的一個顯示名稱。後面在爲大家講解這個的實際應用
[Display(Name = "年齡")] public int Age { set; get; }
數據綁定及驗證
首先要進行客戶端校驗有幾個比較重要的點:
1、 必須要用@Html.BeginForm()這種方式包含住輸入標籤。(自己試驗了下,是這樣的。如果有錯誤請好心提醒)
2、 必須要用強類型頁面。
3、 必須要引用Jquery庫、Jquery.Validate、Jquery.Validate.unobtrusive這三個文件
4、 web.config文件中這兩個值必須爲True。默認爲True
<appSettings> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> </appSettings>
三、自定義數據註解
public class EnglishCharAttribute : ValidationAttribute //RegularExpressionAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
Regex reg = new Regex("^[a-z]+$");
if (reg.IsMatch(value.ToString()))
{
return ValidationResult.Success;
}
else
{
return new ValidationResult("必須爲英文字符!!!!");
}
}
//public EnglishCharAttribute()
// : base(@"^[a-z]+$")
//{
//}
}
更多參考: