0

MVC3 및 EF4.1을 사용하면 내 뷰 모델에서 둘 이상의 필드를 클라이언트 및 서버에서 어떻게 유효성을 검사합니까?MVC3/EF CustomValidator 모델의 두 필드

수정할 수있는 텍스트 상자가 있고 숨겨진 필드에 원래 시작 날짜가 있습니다. 사용자가 양식을 제출하면 수정 된 시작일이 원래 시작일의 한 달에 한 달 미만인지 확인하고 싶습니다.

DataAnnotation 및 CustomValidation을 사용하여이 작업을 수행하는 방법을 알 수 없습니까? 아니면 잘못된 길로 가려고합니다. 이것은 내가 함께 일한지 whay의 예입니다

[MetadataType(typeof(Metadata.MyUserMetaData))] 
public partial class MyUser 
{ 
    public System.DateTime DateOfBirth { get; set; }  
} 

부분 클래스 내가보기에 jQuery를 추가 여전히했습니다 알고

public class MyUserMetaData 
{ 
    [CustomValidation(typeof(AmendedStartDate), "amendedstartdate", ErrorMessage = "Invalid date."] 
    public DateTime StartDate { get; set; }; 

    public DateTime OriginalStartDate { get; set; }; 
} 

사용자 정의 유효성 검사기

public class AmendedStartDate : ValidationAttribute, IClientValidatable 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     // How do I get multiple field values from object value? 
    } 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(Modelmetadata metadate, ControllerContext context) 
    { 
     var rule = new ModelClientValidationRule 
     { 
     ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()), 
      ValidationType = "amendedstartdate" 
     }; 

     yield return rule; 
    } 
} 

이 유효성 검사기에 대해.

답변

0

MVC custom validation: compare two dates에 질문 한 질문에는 모델의 두 번째 값과 비교되는 유효성 검사기의 예가 있습니다. 그것은 당신을 시작해야합니다.

+0

감사합니다. 덕분에 많은 도움이되었습니다. – nrg

2

데이터 주석을 사용하는 대신 IValidatableObject을 모델 클래스에 구현합니다. 교차 유효성 검사를 사용하는 시나리오에서는 훨씬 간단하고 훨씬 명확합니다.

당신은 아직도 당신이 IsValid 방법에 두 개의 매개 변수가 ValidationAttribute 사용하려면

는 :

  • value는 속성이
  • context을 할당 속성의 유효 값을 나타내는 속성이 검증되어있는 상황입니다 . 또한 인스턴스 전체를 캐스팅하고 다른 속성에 액세스 할 수 있도록 전체 모델 및 유형에 액세스하려면 ObjectInstanceObjectType 속성이 포함되어 있습니다.
+0

라디 슬라브. 나는 이미 그 길을 걷고 있었으므로 @counsellorben 답을 수락했으나 다음 번에는 그 해결책을 확실히 볼 것입니다. – nrg

관련 문제