Asp.Net MVC entity framework模型驗證

一、不修改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);
        }

二、基本校驗使用

原文地址:http://www.cnblogs.com/showstyle/p/3336369.html

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]+$")
        //{
        //}
    }
更多參考:
http://www.cnblogs.com/zhangkai2237/archive/2012/12/12/2814825.html
http://blog.csdn.net/chengly0129/article/details/7828441
發佈了86 篇原創文章 · 獲贊 12 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章