ASP.NET MVC 5 인증 추가(4)

때때로 우리 사 이 트 는 검증 을 추가 해 야 한다.이 절 에서 우 리 는 ASP.NET MVC 5 를 어떻게 사용 하여 검증 을 추가 하 는 지 보 여 준다.
1.Model 클래스 에 인증 을 추가 합 니 다.코드 는 다음 과 같 습 니 다.

 public class Movie
 {
  public int ID { get; set; }
  [StringLength(60,MinimumLength=3,ErrorMessage="        3 60   ")]
  public string Title { get; set; }
 
  [Display(Name="Release Date")]
  [DataType(DataType.Date)]
  [DisplayFormat(DataFormatString="{0:yyyy-MM-dd}",ApplyFormatInEditMode=true)]
  public DateTime ReleaseDate { get; set; }
  [RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
  [Required]
  [StringLength(30)]
  public string Genre { get; set; }
  [Range(1,100)]
  [DataType(DataType.Currency)]
  public decimal Price { get; set; }
 
  [RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
  public string Rating { get; set; }
 
 
 }
이 StringLength 속성 은 최대 문자열 길 이 를 설정 하여 데이터 베 이 스 를 제한 하기 때문에 데이터베이스 구조 가 변 경 됩 니 다.데이터베이스 구조 가 바 뀌 지 않 았 다 는 정의 가 어떤 지 먼저 살 펴 보 겠 습 니 다.
2.그림 보기:

3.위의 그림 에서 보 듯 이 모든 string 형식의 필드 는 NVARCHAR(MAX)입 니 다.저 희 는 데이터 베이스 이전 기술 을 사용 하여 표 구 조 를 업데이트 하고 패키지 관리자 콘 솔 을 열 어 다음 명령 을 입력 할 것 입 니 다.
  add-migration DataAnnotations
  update-database
이 명령 이 끝 난 후에 VS 생 성 된 이전 파일 을 엽 니 다.Up 방법 에서 추 가 된 데이터베이스 제약 조건 을 보 았 습 니 다.
4.그림 보기:

5.다음은 데이터 베 이 스 를 열 어 데이터 시트 구조 에 어떤 변화 가 생 겼 는 지 살 펴 보 겠 습 니 다.

6.
이 인증 속성 은 Model 에 적용 할 속성 을 지정 합 니 다.Required 와 MinimumLength 속성 은 값 이 있어 야 하지만 사용자 가 빈 칸 을 입력 하여 이 인증 을 만족 시 키 는 것 을 막 지 는 않 습 니 다.Regular Expression 속성 은 입력 할 수 있 는 문 자 를 제한 하 는 데 사 용 됩 니 다.위의 코드 에서 Genre 와 Rating 필드 는 알파벳 만 있어 야 합 니 다.(빈 칸,숫자 그리고 다른 특수 문 자 는 허용 되 지 않 습 니 다.)Range 속성 은 특정한 범위 내 에서 값 을 제약 합 니 다.StringLength 속성 은 문자열 의 최대 길이,값 형식(예 를 들 어;decilmal,int float,DateTime)은 모두 내 적 으로 필요 하지만 Required 에 있어 서 는 필요 하지 않 습 니 다.
Code First 는 Model 에 지정 한 인증 을 확보 하고 데이터 베 이 스 를 저장 하기 전에 검증 할 수 있 도록 합 니 다.예 를 들 어 다음 코드 는 SaveChanges 가 호출 될 때 오류 가 발생 합 니 다.필요 한 필드 가 없어 졌 기 때 문 입 니 다.

MovieDBContext db = new MovieDBContext();
 Movie movie = new Movie();
 movie.Title = "Gone with the Wind";
 db.Movies.Add(movie);
 db.SaveChanges(); // <= Will throw server side validation exception 
7. 데이터 검증 은.NET Framework 를 통 해 자동 으로 실 행 됩 니 다.이 는 프로그램 을 더욱 튼튼 하 게 할 수 있 습 니 다.마찬가지 로 검증 하 는 것 을 잊 지 않 을 것 입 니 다.그리고 의도 적 으로 나 쁜 데 이 터 를 데이터베이스 에 업데이트 시 키 려 는 것 이 아 닙 니 다.
8.다음은 검증 을 시작 합 시다.프로젝트 를 실행 합 니 다.
새 링크 를 누 르 면 새 동 영상 을 추가 합 니 다.비합법적 인 데 이 터 를 입력 한 후에 오 류 를 보 았 다.

Note to support jQuery validation for non-English locales that use a comma (",") for a decimal point, you must include the NuGet globalize as described previously in this tutorial.
9.
주의:폼 은 검 증 될 텍스트 상자 의 오류 데 이 터 를 강조 하기 위해 빨간색 테 두 리 를 자동 으로 사용 합 니 다.오류 메시지 가 옆 에 표 시 됩 니 다.(PS:여 기 는 제 가 시간 을 아 껴 서 대충 번역 해 봤 어 요.그냥 대충 의 미 를 꺼 냈 을 뿐 이에 요.)
이 진정한 장점 은 vaidation UI 를 사용 하기 위해 컨트롤 러 나 보기 페이지 에서 코드,컨트롤 러,보기 페이지 를 바 꾸 지 않 아 도 된다 는 것 입 니 다.앞의 Model 클래스 에 적 힌 인증 규칙 을 캡 처 했 습 니 다.테스트 검증,우 리 는 편집 방법 을 사용 합 니 다.이 검증 은 편집 기능 에 도 적 용 됩 니 다.
클 라 이언 트 의 잘못된 인증 메커니즘 이 없 는 한 폼 의 데 이 터 는 서버 에 제출 되 지 않 습 니 다.브 라 우 저 에서 F12 를 누 르 고 Post 방법 에서 정지점 을 설정 하여 디 버 깅 할 수 있 습 니 다.
 10.보기 와 방법 에 어떻게 나타 나 는 지 검증 합 니 다.
이 인터페이스의 검증 이 어떻게 컨트롤 러 와 보 기 를 수정 하지 않 은 상태 에서 발생 했 는 지 생각 할 수 있 습 니 다.아래 코드 는 컨트롤 러 코드 입 니 다.이전에 만 든 것 으로 수정 되 지 않 았 습 니 다.

 public ActionResult Create()
 {
   return View();
 }
 // POST: /Movies/Create
 // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
 // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
 [HttpPost]
 [ValidateAntiForgeryToken]
 public ActionResult Create([Bind(Include = "ID,Title,ReleaseDate,Genre,Price,Rating")] Movie movie)
 {
   if (ModelState.IsValid)
   {
     db.Movies.Add(movie);
     db.SaveChanges();
     return RedirectToAction("Index");
   }
   return View(movie);
 }
첫 번 째 Create 방법(HTTP GET)은 초기 데 이 터 를 보 여주 고,두 번 째 Create 방법 은 폼 제출 을 처리 합 니 다.두 번 째 create 방법 은 이 ModelState.IsValid 를 호출 하여 movie 실체 에 검증 되 지 않 은 데이터 가 있 는 지 확인 합 니 다.ModelState.IsValid 를 호출 하면 검증 속성 이 있 는 지,어떤 대상 에 작용 하 는 지 판단 할 수 있 습 니 다.이 대상 에 인증 오류 가 발생 하면 이 Create 방법 은 폼 을 다시 보 여 주 며 오류 가 없 으 면 데이터 베 이 스 를 저장 합 니 다.우리 의 예 에서 클 라 이언 트 인증 에 오류 가 발생 하면 폼 의 데 이 터 는 서버 에 제출 되 지 않 습 니 다.이 두 번 째 Create 방법 은 영원히 호출 되 지 않 을 것 이다.브 라 우 저의 javascript 을 금지 하면 클 라 이언 트 의 인증 이 실 효 됩 니 다.그리고 이 Post 방식 의 Create 방법 은 ModelState.IsValid 를 호출 하여 Movie 실체 에 인증 이 통과 되 지 않 았 는 지 확인 합 니 다.
11.아래 에 표 시 된 코드 는 인증 에 실 패 했 고 잘못된 메 시 지 를 표시 하 는 데 사 용 됩 니 다.
12.코드 를 직접 보 세 요.

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Web;
 using System.Data.Entity;
 using System.ComponentModel.DataAnnotations;
 
 namespace MvcMovie.Models
 {
  public class Movie
  {
    public int ID { get; set; }
    [StringLength(60,MinimumLength=3,ErrorMessage="        3 60   ")]
     public string Title { get; set; }
 
     [Display(Name="Release Date")]
     [DataType(DataType.Date)]
     [DisplayFormat(DataFormatString="{0:yyyy-MM-dd}",ApplyFormatInEditMode=true)]
     public DateTime ReleaseDate { get; set; }
     [RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
     [Required]
     [StringLength(30)]
     public string Genre { get; set; }
     [Range(1,100)]
     [DataType(DataType.Currency)]
     public decimal Price { get; set; }
 
     [RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
     public string Rating { get; set; }
 
 
   }
 
  public class MovieDBContext : DbContext
   {
     public DbSet<Movie> Movies { get; set; }
   }
 }
13.
DataType 속성 은 보기 엔진 에 데 이 터 를 포맷 하 는 것 만 알려 줍 니 다.RegularExpression 속성 을 사용 하여 포맷 된 데 이 터 를 검증 할 수 있 습 니 다.DataType 은 검증 속성 이 아니 라 데이터 베이스 와 차이 가 많 지 않 습 니 다.데이터 형식 만 지 정 했 을 뿐 DataType 매 거 진 형식 은 많은 데이터 형식 을 제공 합 니 다.예 를 들 어 Date,Time,Phone Number,Currency,EmailAddress 등 입 니 다.DataType 속성 역시 프로그램 이 a mailto:link 와 같은 특수 한 유형 을 만 들 수 있 도록 보장 할 수 있 습 니 다.DataType.EmailAddress 를 만 드 는 데 사용 할 수 있 습 니 다.DataType 은 어떠한 검증 도 제공 하지 않 습 니 다.
DataType.Data 는 포맷 시간 을 지정 할 수 없습니다.이것 은 기본적으로 서버 의 시간 에 따라 온 것 이다.

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime EnrollmentDate { get; set; }
14.
텍스트 편집 모드 에 있 을 때 ApplyFormat InEditMode 속성 이 적 용 됩 니 다.(이러한 상황 을 화폐 형식의 필드 에 적용 하고 싶 지 않 을 수도 있 습 니 다.화폐 유형 을 텍스트 편집 모드 에 두 고 싶 지 않 기 때 문 입 니 다) 
이 럴 때 DisplayFormat 을 사용 할 수 있 지만 더 좋 은 아 이 디 어 는 DataType 을 사용 하 는 것 입 니 다.이 속성 은 몇 가지 좋 은 점 을 제공 합 니 다.
브 라 우 저 지원 HTML 5 기능
브 라 우 저 는 기본적으로 로 컬 컴퓨터 에 데 이 터 를 정확하게 표시 합 니 다.
DataType 속성 은 MVC 가 정확 한 필드 를 선택 하고 데 이 터 를 표시 할 수 있 도록 합 니 다(DisplayFormat 은 문자열 템 플 릿 을 사용 합 니 다). 
DataType 속성 을 사용 했다 면 디 스 플레이 Format 속성 을 지정 하여 구 글 브 라 우 저 에 데 이 터 를 정확하게 표시 할 수 있 도록 해 야 합 니 다.
jQuery vaidation 은 Range,DateTime 속성 을 지원 하지 않 습 니 다.특정 범 위 를 지정 하 더 라 도 클 라 이언 트 의 인증 오 류 를 보고 합 니 다.
코드 보기:
[Range(typeof(DateTime), "1/1/1966", "1/1/2020")]
이상 은 ASP.NET MVC 5 에 인증 을 추가 하 는 방법 입 니 다.여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기