2012-08-02 84 views
4

我想驗證Ville + Code-postal + Pays是唯一的。多個字段的遠程驗證

如果驗證未通過,我想將字段標記爲無效(通常爲紅色)。

enter image description here

我已經嘗試了第一個實現象下面這樣:

public class CityEditViewModel 
{ 
    public int CityID { get; set; } 

    [Required, Remote("CityAlreadyExists", "City", AdditionalFields = "CountryID, CityID, PostCode", ErrorMessageResourceName = "CityAlreadyExists", ErrorMessageResourceType = typeof(UserResource))] 
    [Display(Name = "City", ResourceType = typeof(UserResource))] 
    public string CityName { get; set; } 

    [Required, Remote("CityAlreadyExists", "City", AdditionalFields = "CountryID, CityID, CityName", ErrorMessageResourceName = "CityAlreadyExists", ErrorMessageResourceType = typeof(UserResource))] 
    [Display(Name = "PostCode", ResourceType = typeof(UserResource))] 
    public string PostCode { get; set; } 

    [Required, Remote("CityAlreadyExists", "City", AdditionalFields = "CityName, PostCode, CityID", ErrorMessageResourceName = "CityAlreadyExists", ErrorMessageResourceType = typeof(UserResource))] 
    [Display(Name = "Country", ResourceType = typeof(UserResource))] 
    public int CountryID { get; set; } 

    public List<SelectListItem> Countries { get; set; } 
} 

但所有的字段都沒有檢查(驗證),直到我真的改變的東西在裏面。我需要一個解決方案,每當我更改3個字段中的一個時,所有3個字段都將進行驗證並在需要時標記爲紅色。

我已經檢查其他Stackoverflow的帖子,但沒有找到解決我的具體問題。

感謝您的幫助。

+1

我有完全一樣的情況 - 你發現了一個解決這個? – iwayneo 2012-09-21 07:50:29

回答

2

我有類似的情況也一樣,這一次幫我走了

$("#FirstName").change(function() { 
     $('#CardNumber').removeData('previousValue'); 
     $('#CardNumber').valid(); 
    }); 

Multiple fields validation using Remote Validation

+0

謝謝,我會盡快嘗試並隨時通知您。 – Bronzato 2012-11-15 17:01:56

1

擴大對蘇漢的回答,我寫道,發現有「附加字段每個遠程驗證元素這個輔助方法, 「,然後在每次其中一個字段發生變化時對所述元素進行驗證。

// 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")); 
});