2012-05-30 116 views
3

我想用3個選擇器中的RemoteValidation/jQuery驗證出生日期。我想檢查用戶是否年滿18歲。但atm我有一些麻煩,他們分組,使他們無效/一起有效,只有一個錯誤消息。具有遠程驗證MVC 3的jQuery驗證組

目標:我想要驗證所有3個元素作爲一個組(jquery驗證器組)與相同的RemoteValidation當你改變任何人。

任何人都知道如何解決這個問題?

查看:

@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

我會把驗證只在生日下拉(因爲是最後一個),然後觸發這一項上的2個領域改變事件的驗證。

$("#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")); 
});