ASP. NET MVC 모델 검증 총화

11529 단어 mvc검증 하 다.
http://www.wyjexplorer.cn/Post/2012/8/3/model-validation-in-aspnet-mvc3
ASP. NET MVC 3 의 Model 은 자체 검증 되 었 습 니 다. 이것 은. NET 4 의 System. Component Model. Data Annotations 네 임 스페이스 를 통 해 이 루어 졌 습 니 다.우리 가 해 야 할 일 은 Model 류 의 각 속성 에 대응 하 는 검증 태그 (Attributes) 를 추가 하면 MVC 3 프레임 워 크 가 검증 을 완성 할 수 있 습 니 다.나 는 MVC 3 프로젝트 템 플 릿 이 가지 고 있 는 로그 인 을 예 로 들 어 Model 의 검증 을 설명 했다.
1. 클 라 이언 트 인증 사용:
클 라 이언 트 검증 은 주로 사용자 체험 을 향상 시 키 기 위해 웹 페이지 가 되 돌아 오지 않 는 상황 에서 검증 을 완성 하 는 것 이다.
첫 번 째 단 계 는 웹. config 에서 클 라 이언 트 인증 을 사용 하 는 것 입 니 다. 이것 은 MVC 3 자체 템 플 릿 항목 에 이미 있 습 니 다.< add key = "ClientValidationEnabled" value = "true" /> < add key = "UnobtrusiveJavaScriptEnabled" value = "true" />
그리고 검 증 된 View 페이지 에 두 개의 JavaScript 를 추가 해 야 합 니 다. JQuery 에 의존 합 니 다.< script src = "@Url.Content(" ~/Scripts/jquery.validate.min.js")" type = "text/javascript" ></ script > < script src = "@Url.Content(" ~/Scripts/jquery.validate.unobtrusive.min.js")" type = "text/javascript" ></ script >
인증 메시지 의 디 스 플레이 는 두 가지 가 있 습 니 다. 하 나 는 ValidationSummary 입 니 다. 인증 메시지 의 집합 을 표시 할 수 있 습 니 다. 배경 Action 에서 돌아 오 는 메 시 지 를 포함 합 니 다.@Html.ValidationSummary( true , "Login was unsuccessful. Please correct the errors and try again." )
다른 하 나 는 Model 의 각 속성 이 HTML 컨트롤 에 대응 하 는 인증 메시지 입 니 다.@Html.ValidationMessageFor(m => m.UserName)
2. Model 에 인증 표 시 를 추가 합 니 다.
MVC 3 프로젝트 템 플 릿 자체 로그 인 모델 류 는 다음 과 같 습 니 다.public class LogOnModel { [Required]
[Display(Name = "User name" )]
public string UserName { get ; set ; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password" )]
public string Password { get ; set ; }
[Display(Name = "Remember me?" )]
public bool RememberMe { get ; set ; }
}
일반적인 C \ # 클래스 에 비해 우 리 는 모든 속성 에 괄호 '[]' 로 둘러싸 인 태그 가 더 많은 것 을 발견 했다.그 중에서 [Required] 는 인증 태그 의 하나 이 고 [Display], [DataType] 은 해당 하 는 HTML 컨트롤 을 표시 하기 위해 본 논문 의 토론 범위 에 있 지 않 습 니 다.
Required 를 제외 하고 모델 에 다른 유용 한 인증 표 시 를 추가 할 수 있 습 니 다.다음은 비교적 완전한 목록 입 니 다:
Model 클래스 에 추가 할 수 있 는 인증 태그:
1. 필수 필드
[Required]
public string FirstName { get; set; }
2. 필드 길이
최대 n 자리:
[StringLength(160)]
public string FirstName { get; set; }
최소 n 자리 요구:
[StringLength(160, MinimumLength=3)]
public string FirstName { get; set; }
3. 정규 검증
[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”)]
public string Email { get; set; }
4. 범위
[Range(35,44)]
public int Age { get; set; }
소수의 경우:
[Range(typeof(decimal), “0.00”, “49.99”)]
public decimal Price { get; set; }
5. 서버 참여 검증
[Remote(“CheckUserName”, “Account”)]
public string UserName { get; set; }
그리고 Account Controller 에 CheckUserName 방법 을 지정 합 니 다.public JsonResult CheckUserName( string username) { var result = Membership.FindUsersByName(username).Count == 0;
return Json(result, JsonRequestBehavior.AllowGet);
}
6. 비교
[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”)]
public string Email { get; set; }
[Compare(“Email”)]
public string EmailConfirm { get; set; }
7. 사용자 정의 오류 메시지
정규:
[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”,
ErrorMessage=”Email doesn’t look like a valid email address.”)]
public string Email { get; set; }
일반 텍스트:
[Required(ErrorMessage=”Your last name is required”)]
[StringLength(160, ErrorMessage=”Your last name is too long”)]
public string LastName { get; set; }
자리 차지 문자:
[Required(ErrorMessage=”Your {0} is required.”)]
[StringLength(160, ErrorMessage=”{0} is too long.”)]
public string LastName { get; set; }
3. 백 스테이지 Action 의 작성 방법
Action 에서 해 야 할 일 은 두 가지 가 있 습 니 다. ModelState 가 합 법 적 인지, 오류 메 시 지 를 추가 하 는 지 판단 합 니 다.MVC 3 템 플 릿 자체 로그 인 Action 은 다음 과 같 습 니 다.[HttpPost] public ActionResult LogOn(LogOnModel model, string returnUrl) { if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith( "/" )
&& !returnUrl.StartsWith( "//" ) && !returnUrl.StartsWith( "/\\" ))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction( "Index" , "Home" );
}
}
else
{
ModelState.AddModelError( "" , "The user name or password provided is incorrect." );
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
[HttpPost] 에 따 르 면 이 Action 은 POST 동작 으로 만 호출 될 수 있다. 이것 은 View 의 폼 에 맞 추기 위해 서 이다. 왜냐하면 FORM 의 ACTION 은 POST (물론 GET 일 수도 있다) 이기 때문이다. 그러나 이것 은 본 논문 의 토론 범위 에 있 지 않다.
if (ModelState. IsValid) 가 중점 입 니 다. 만약 에 의외 의 사고 가 발생 하지 않 는 다 면 클 라 이언 트 브 라 우 저가 자바 스 크 립 트 를 닫 지 않 았 고 클 라 이언 트 가 해커 가 아 닙 니 다. (해커 가 일부 도 구 를 통 해 POST 를 모 의 할 수 있 습 니 다) 정상 적 인 경 로 를 통 해 POST 에서 이 Action 의 Model 까지 모두 IsValid 여야 합 니 다.물론 프로 그래 밍 의 중요 한 원칙 은 사용자 의 입력 을 믿 을 수 없다 는 것 이기 때문에 우 리 는 ModelState. IsValid 를 다시 한 번 판단 할 필요 가 있다.
ModelState. AddModelError 방법 은 View 에 오류 메 시 지 를 되 돌려 주 고 @ Html. ValidationSummary 에 게 보 여 주 는 것 입 니 다.
마지막 으로 정규 표현 식 을 추가 합 니 다.
숫자: "^ [0 - 9] * $".
n 비트 의 숫자: "^ \ d {n} $".
최소 n 자리 숫자: "^ \ d {n,} $".
m ~ n 비트 의 숫자:."^\d{m,n}$"
0 과 0 이 아 닌 시작 숫자: "^ (0 | [1 - 9] [0 - 9] *) $".
두 소수 의 정실 수가 있다. "^ [0 - 9] + ([0 - 9] {2})? $".
1 ~ 3 자리 소수 의 정실 수: "^ [0 - 9] + ([0 - 9] {1, 3})? $".
0 이 아 닌 정수: "^ \ +? [1 - 9] [0 - 9] * $".
0 이 아 닌 마이너스 정수: "^ \ - [1 - 9] [] 0 - 9" * $.
길이 가 3 인 문자: "^. {3} $".
26 개의 영문 자모 로 구 성 된 문자열: "^ [A - Za - z] + $".
대문자 26 개 로 구 성 된 문자열: "^ [A - Z] + $".
소문 자 26 개 로 구 성 된 문자열: "^ [a - z] + $".
숫자 와 26 개의 영문 자모 로 구 성 된 문자열: "^ [A - Za - z0 - 9] + $".
숫자, 26 개의 영문 자모 또는 밑줄 로 구 성 된 문자열: "^ \ w + $".
사용자 암 호 를 검증 합 니 다: "^ [a - zA - Z] \ w {5, 17} $" 정확 한 형식 은 알파벳 으로 시작 하고 길 이 는 6 ~ 18 사이 이 며 문자, 숫자, 밑줄 만 포함 할 수 있 습 니 다.
^% & ',; =? $\ 가 들 어 있 는 지 확인 합 니 다."등 문자:" [^% & ',; =? $\ x22] + ".
한자 만 입력 가능: "^ [\ u4e 00 - \ u9fa 5] {0,} $"
이메일 주소 검증: "^ \ \ w + ([- +.] \ w +) * @ \ w + ([-.] \ w +) * \. \ w + ([-.] \ w +) * $"
인터넷 URL 을 검증 합 니 다. "^ http: / / ([\ w -] + \.) + [\ w -] + (/ [\ w -. /?% & =] *)? $"。
전화번호 확인: "^ (\ (\ d {3, 4} -) | \ d {3.4} -)? \ \d {7, 8} $"정확 한 형식 은" XXX - XXXXX "," XXX - XXXXX "," XXX - XXXXX "," XXX - XXXXX "," XXX - XXXXX "," XXXXX "와" XXXXX XXX "입 니 다.
인증 주민등록번호 (15 자리 또는 18 자리 숫자): "^ \ d {15} | \ d {18} $".
검증 1 년 12 개 월: "^ (0? [1 - 9] | 1 [0 - 2] $" 의 정확 한 형식 은 "01" ~ "09" 와 "1" ~ "12" 입 니 다.
한 달 동안 검증 한 31 일: "^ (0? [1 - 9]) | (1 | 2) [0 - 9] | 30 | 31) $" 의 정확 한 형식 은 "01" ~ "09" 와 "1" ~ "31" 입 니 다.

좋은 웹페이지 즐겨찾기