2012-04-15 12 views
14

Ich habe folgendes Modell:Mehrere Felder Validierung Fern Validation

public class Customer 
{ 
    public string FirstName {get;set;} 

    public string LastName {get; set;} 

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

CardExisting Aktion prüft, ob es ein vorhandener Datensatz für die Kombination von cardnumber für die Vor- und den Nachnamen.

Was ist, wenn Benutzer zuerst die Kartennummer und dann seinen Namen eingeben, kann ich ihn nicht validieren. Wenn er also zurückkehrt und seinen Namen eingibt, muss ich ihn erneut überprüfen. Wie kann ich das tun, wenn der Fokus bereits von Kartennummer verloren gegangen ist Eigentum?

Antwort

3

Die Art, wie ich das funktioniere, ist durch das Hinzufügen von etwas JavaScript.

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

Wenn der Vorname geändert wird, löschen Sie alle vorherigen Werte von der Kartennummer und validieren die Kartennummer erneut.

20

Erweitern Sie auf Jaluka Antwort, schrieb ich diese Hilfsmethode, die jedes entfernt validierende Element findet, das "zusätzliche Felder" hat, und dann die Überprüfung dieses Elements ausgelöst jedes Mal, wenn eines dieser Felder ändert.

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

Rufen Sie die Funktion wie folgt:

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

W00T !!! Vor zwei Tagen hast du das beantwortet und ich brauchte es gerade jetzt ... dein Code funktioniert GROSS! :) In meinem Fall habe ich 2 Dropdowns, die zusammenarbeiten müssen, das heißt, eines ist das zusätzliche Feld des anderen. Schöne Lösung für etwas, das standardmäßig IMHO sein sollte. :) –

+0

hehehe Ich mag es auch nicht, Dinge zu benennen ... aber angesichts der Natur unseres Berufes ist es von Natur aus mehrmals täglich notwendig! : D –

+0

Danke, diese Lösung funktioniert auch gut für MVC4. –

2

, wenn Sie Client-Skripte erstellen nicht mögen:

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

und validieren alle Felder in CardExisting gefüllt sind oder nicht