2014-05-14 3 views
0

프로젝트에 MVC 5 및 Entity Framework를 사용하고 있습니다.mvc 5 및 유효성 검사 모델

내가 거기에 몇 가지 검사가 필요
public class ContractViewModel : IValidatableObject 
{ 
    public int Id { get; set; } 

    [Required] 
    [DisplayName("Registration Number")] 
    public string RegistrationNumber { get; set; } 

    [DisplayName("Start Date")] 
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)] 
    public DateTime? StartDate { get; set; } 

    [DisplayName("Scheduled End Date")] 
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)] 
    public DateTime? EndDate { get; set; } 

    } 


    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     // check 1: Start Date should be before End Date 
     if (StartDate != null && EndDate != null) 
     { 
      if (DateTime.Compare(StartDate.Value, EndDate.Value) > 0) 
      { 
       yield return new ValidationResult("Start Date must be before End Date"); 
      } 
     } 
    } 
} 

는, 등록 번호가 작성 될 필요가 이미 존재하지 :

나는 내 프로젝트에서 모델이있다. 시작 날짜는 종료 날짜 이전이어야합니다.

ModelState.AddModelError("", "Registration Number already exists."); 

을 STARTDATE 및 EndData의 경우 :

현재 등록 번호에 대해 나는 이미 존재하지 않는, 나는 내 할 때 내가 거기 그것을 확인 저장하고 이미 존재하는 경우 I는 사용이 필수 주석이 IValidateObject 인터페이스에서 Validate 메서드를 사용했습니다.

유효성 검사 메서드에서 등록 번호 확인을 수행하지 않은 이유는 해당 라이브러리 (ProjectModels.dll)가 Entity Framework를 참조하기를 원치 않았기 때문입니다.

현재 검사가 완료되면 결합되지 않으므로 등록 번호가 입력되지 않고 종료일이 StartDate 이전 인 경우 등록 번호 확인 만 표시됩니다.

어쨌든 모든 프로그램을 함께 표시 할 수 있습니까?

또한 등록 번호에 필요한 주석은 ValidationMessageFor 속성을 사용하여 양식의 필드 아래에 오류 메시지를 표시합니다. 오류가 발생할 때 다른 2에 대한 표시를 얻으려면 어떻게해야합니까?

+2

나는 기본 모델 바인더가 주석의 유효성을 검사하고 modelstate가 유효하지 않으면 validate 메소드를 트리거하지 않는다고 생각합니다. validate 메소드 내에서 데이터 주석의 로직을 이동하거나 ValidationAttribute에서 상속받은 고유 한 유효성 검증 속성을 작성하고 validate 메소드를 제거해야합니다. 호감이가는 것 – heymega

+0

@heymega 예, 이해가됩니다. 나는 그들을 모두 움직여야한다는 느낌이 들었습니다. – Paritosh

답변

0

리포지토리 데이터 액세스 코드를 호출하여 사용자 지정 코드가 데이터를 조회해야하는 정교한 비즈니스 규칙을 작성하는 것은 재미 있고 어려울 수 있습니다.

Foolproof라는 Nuget 패키지는 할 수있는 것을 확장하는 몇 가지 속성을 추가하지만 CSLA.Net은 체크 아웃 할 가치가있는 규칙 엔진이있는 비즈니스 개체를 만드는 탁월한 프레임 워크입니다.

관련 문제