2012-05-30 7 views
3

3 개의 선택기에서 RemoteValidation/jQuery로 생년월일의 유효성을 검사하고 싶습니다. 사용자가 18 세 이상인지 확인하고 싶습니다. 그러나 atm 나는 그것들을 그룹 짓는 데 약간의 어려움을 겪고있다. 그래서 그것들은 함께 유효하고 하나의 errormessage만으로 유효하다.jQuery 유효성 검사 그룹 (원격 유효성 검사 포함) MVC 3

목표 : 그 중 하나를 변경하면 동일한 RemoteValidation을 사용하여 3 개의 요소를 모두 하나의 그룹 (jquery 유효성 검사기 그룹)으로 유효성을 검사하고 싶습니다.

누구나 어떻게 해결할 수 있을까요?

보기 :

@Html.DropDownListFor(m => m.BirthYear, Model.BirthYearList) 
@Html.DropDownListFor(m => m.BirthMonth, Model.BirthMonthList) 
@Html.DropDownListFor(m => m.BirthDay, Model.BirthDayList) 

모델

[Remote("IsValidCustomerBirthDate", "JsonValidation", AdditionalFields = "BirthDay, BirthMonth", ErrorMessageResourceName = "InvalidCustomerBirthDate", ErrorMessageResourceType = typeof(Error))] 
[Required] 
public int BirthYear { get; set; } 

[Remote("IsValidCustomerBirthDate", "JsonValidation", AdditionalFields = "BirthYear, BirthDay", ErrorMessageResourceName = "InvalidCustomerBirthDate", ErrorMessageResourceType = typeof(Error))] 
[Required] 
public int BirthMonth { get; set; } 

[Remote("IsValidCustomerBirthDate", "JsonValidation", AdditionalFields = "BirthYear, BirthMonth", ErrorMessageResourceName = "InvalidCustomerBirthDate", ErrorMessageResourceType = typeof(Error))] 
[Required] 
public int BirthDay { get; set; } 

RemoteValidation 기능

[HttpGet] 
public JsonResult IsValidCustomerBirthDate(int birthYear, int birthMonth, int birthDay) 
    { 
     try 
     { 
      var dateOfBirth = new DateTime(birthYear, birthMonth, birthDay); 
      var ageCalculator = new AgeCalculator(); 

      if (ageCalculator.GetAge(dateOfBirth) >= AgeLimit)     
      { 
       return Json(true, JsonRequestBehavior.AllowGet); 
      } 
     } 
     catch (ArgumentException) 
     { 

     }    

     return Json(false, JsonRequestBehavior.AllowGet); 
    } 

내가 유효성 검사에서 그룹과 몇 가지 어려움을 겪고있는()하지만 어디 못하고 있었어요.

모든 종류의 입력에 감사드립니다. (저는 프론트 엔드 개발자입니다. C# 코드가 복잡하다면 좀 더 유익해야합니다.)

친절 감사/매그너스는

답변

0

나는 (마지막 하나이기 때문에)에만 생일 드롭 다운에 검증을 넣고 이벤트를 변경하려면이 개 다른 필드에이 하나의 유효성 검사를 실행할 수 있습니다.

$("#BirthYear, #BirthMonth").change(function(e){ 
    $("#BirthDay").valid(); 
}); 
0

또한 kpull1과 동일한 접근 방식을 사용합니다. 그의 답변을 조금 확장하면, 나는 "추가 필드"가있는 각각의 원격 유효성 검사 요소를 찾은 다음 해당 필드 중 하나가 변경 될 때마다 해당 요소에 대한 유효성 검사를 실행하는이 도우미 메서드를 작성했습니다.

// I hate naming things 
function initializeRemotelyValidatingElementsWithAdditionalFields($form) { 
    var remotelyValidatingElements = $form.find("[data-val-remote]"); 

    $.each(remotelyValidatingElements, function (i, element) { 
     var $element = $(element); 

     var additionalFields = $element.attr("data-val-remote-additionalfields"); 

     if (additionalFields.length == 0) return; 

     var rawFieldNames = additionalFields.split(","); 

     var fieldNames = $.map(rawFieldNames, function (fieldName) { return fieldName.replace("*.", ""); }); 

     $.each(fieldNames, function (i, fieldName) { 
      $form.find("#" + fieldName).change(function() { 
       // force re-validation to occur 
       $element.removeData("previousValue"); 
       $element.valid(); 
      }); 
     }); 
    }); 
} 

콜과 같이 기능 :

$(document).ready(function() { 
    initializeRemotelyValidatingElementsWithAdditionalFields($("#myFormId")); 
});