Validación de múltiples campos usando validación remota

Tengo el siguiente modelo:

public class Customer { public string FirstName {get;set;} public string LastName {get; set;} [Remote("CardExisting", "Validation", AdditionalFields="FirstName,LastName") public string CardNumber {get; set;} } 

La acción CardExisting verificará que haya un registro existente para la combinación de cardNumber para firstName y LastName.

¿Qué pasa si el usuario ingresa primero el número de tarjeta y luego su nombre, no puedo validarlo, por lo que cuando regrese e ingrese su nombre necesito volver a validar remotamente, ¿cómo puedo hacer eso cuando el foco ya se perdió de la propiedad del número de tarjeta?

Ampliando la respuesta de Jaluka, escribí este método de ayuda que encuentra cada elemento de validación remota que tiene “campos adicionales” y luego hace que la validación de dicho elemento se active cada vez que cambia uno de esos campos.

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

Llame a la función de esa manera:

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

La forma en que tengo esto funcionando es agregando algo de JavaScript.

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

Por lo tanto, cuando se cambia el nombre, borre todos los valores previos del número de tarjeta y vuelva a validar el número de tarjeta.

si no le gusta crear scripts de cliente:

  public class Customer { [Remote("CardExisting", "Validation", AdditionalFields = "CardNumber,LastName")] public string FirstName { get; set; } [Remote("CardExisting", "Validation", AdditionalFields = "FirstName,CardNumber")] public string LastName { get; set; } [Remote("CardExisting", "Validation", AdditionalFields = "FirstName,LastName")] public string CardNumber { get; set; } } 

Y valide en CardExisting todos los campos están llenos o no