Convalida di più campi mediante Convalida remota

Ho il seguente modello:

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

L’azione CardExisting controllerà che esiste un record esistente per la combinazione di cardNumber per firstName e LastName.

Che cosa succede se l’utente prima immette il numero della carta e poi il suo nome, non posso convalidarlo, quindi quando ritorna e inserisce il suo nome ho bisogno di convalidare a distanza di nuovo, come posso farlo quando l’attenzione era già persa dalla proprietà del cardnumber?

Espandendo la risposta di Jaluka, ho scritto questo metodo di supporto che trova ogni elemento di convalida remoto che ha “campi aggiuntivi” e quindi causa la convalida su detto elemento per sparare ogni volta che uno di questi campi cambia.

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

Chiama la funzione in questo modo:

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

Il modo in cui ho funzionato è aggiungendo qualche JavaScript.

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

Quindi, quando il nome cambia, cancella tutti i valori precedenti dal numero di carta e convalida nuovamente il numero della carta.

se non ti piace creare script client:

  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; } } 

E convalidare su CardExisting tutti i campi sono compilati o meno