2012-08-02 68 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")); 
});