MVC2-Client-Seitige Validierung für injiziert Ajax-content
Mache ich einen Ajax-Aufruf und hinzufügen von Inhalt zu einem Formular innerhalb einer MVC2-app.
Ich brauche ein update der Client-Validierung von Metadaten mit der Validierung für meine neue Inhalte.
<script type="text/javascript">
//<![CDATA[
if (!window.mvcClientValidationMetadata) { window.mvcClientValidationMetadata = []; }
window.mvcClientValidationMetadata.push({"Fields":[{"
...
</script>
Gibt es eine Möglichkeit, dies zu erzeugen Metadaten, die für eine teilweise Ansicht ?
Vielen Dank im Voraus.
- Ich lief in dieses Problem, wie gut. Es treibt mich in den Wahnsinn, und fahren Sie mich zurück zu xVal.
Du musst angemeldet sein, um einen Kommentar abzugeben.
War ich schlug mit meinem Kopf gegen eine Wand für ein paar Tage auf diese zu und fahre weiter auf der route entfernen Sie das form-tag, aber gerade kam es in einem etwas weniger hacky Weg, wenn Sie noch daran interessiert sind. Mein Szenario war ähnlich, dass ich ein Formular mit einer Auflistung von Elementen zu validieren am Anfang, aber die Benutzer können dynamisch hinzufügen neuer Zeilen via ajax.
Ich werde break it down, so dass ich hoffe, es wird einfacher sein, zu sehen, was Los ist. Blick auf das MVC-source-code, die form und die Validierung funktioniert in etwa so:
Html.BeginForm() Ausgänge die öffnung form-tag erzeugt dann und gibt eine neue Instanz von MvcForm, die nicht äußerlich viel tun, außer den Geltungsbereich der form einfacher zu verwalten für Sie.
Es hat jedoch eine neue erstellen FormContext und speichert diese in ViewContext.FormContext. Es ist diese FormContext, die Spuren der client-Validierung.
Das Letzte, was Html.BeginForm() ist, wird die FormId-Eigenschaft des neuen FormContext, über die id des form-Tags. Dies ist erforderlich, damit die client-Skript kann die match-up-Formulare und Validierung Regeln.
Html.EndForm() verfügt über die MvcForm. Diese Dispose-Methode gibt die form schließenden tag und dann ruft ViewContext.OutputClientValidation (), die ist verantwortlich für die Ausgabe des javascript. Schließlich entfernt die aktuelle FormContext und legt es zurück auf die übergeordnete FormContext oder null, wenn es nicht ein.
Also nicht die Ausgabe die form tag wir irgendwie brauchen, um einige der FormContext management aus der MvcForm Konstruktor/Destruktor.
Also in meiner Teilansicht habe ich Folgendes:
Oben ich prüfen, ob die ViewContext.FormContext hat einen Wert. Wenn ja, wir wir sind in den ersten laden, so dass keine Notwendigkeit, mess around. Wenn nicht, ist es eine ajax-Aufruf, so dass ich auf dem client aktivieren Validierung, erstellen Sie eine neue MvcForm direkt (nicht mit BeginForm) - dies bewirkt eine FormContext erstellt werden - und die FormContext.FormId, um die gleiche wie meine Eltern zu Seite
Am Ende der Blick, den ich überprüfen, ob ich habe eine Formular-Instanz und wenn ja, rufen Sie ViewContext.OutputClientValidation (zurücksetzen) und die ViewContext.FormContext auf null. Ich weiß nicht Dispose() die MvcForm als würde dieser Ausgang der schließende tag und MvcForm enthält keine Einweg-Objekte.
Skelett der Blick sieht aus, als so:
Könnte man ganz einfach wrap up in ein extension-Methode
Phil
Endlich zum laufen bekommen.
Die Antwort ist einfach: nicht Taille Zeit mit MicrosoftMvcValidation.js. Es erzeugt mit dem Skript# was es schwierig macht, zu verlängern.
Schalter xVal und jQuery Validierung.
Es muss nicht ein Formular zum generieren der client-Validierung von Metadaten.
Auch in der Reihenfolge zu laden, die Validierung für eine AJAX-Anfrage alle Sie tun müssen ist, rufen Sie die folgende, nach dem Sie die neue Html:
Dass es tut. Zuerst entfernen Sie den alten content. Als überprüfung erneut ausführen, um loszuwerden, veralteten Fehler bei der Validierung. Als das hinzufügen der neuen Inhalte. Funktioniert wie ein cham.
Auch jQuery Validation ist es wirklich einfach zu aktivieren oder deaktivieren Sie die Validierung für ein bestimmtes Feld (bedingte Validierung).
Ich habe das gleiche problem und beheben mit der Zukunft-Dateien, und in MicrosoftMvcJQueryValidation.js ich ändern und der Datei, diese:
für:
- und in-Inhalte nach in der Nähe Formular verwenden, nenne ich das 'chargeValidation()', diese Entschlossenheit für mich, ich habe das problem mit $.get(Aktion) mit einem Formular-Validierung.
Ich hoffe, dass ich dir helfen!
Es endlich gefunden.
Nachdem der Inhalt geladen ist, dynamisch zu registrieren Sie die neue form.
Da bin ich mit Facebox, ich habe es auf die facebox-code, aber Sie können es hinzufügen, wo immer Sie brauchen, oder einen Rückruf, wenn Ihr modales oder was auch immer Sie laden in eine afterLoaded Veranstaltung.
Ich wickelte Sie in einen try/catch-nur für den Fall, das ich jemals verwenden facebox ohne die Validierung Zeug.
Führen Sie einfach diese beiden Zeilen NACH Ihrem Inhalt geladen wurde:
Machte ich einige Fortschritte, aber ich bin nicht ganz glücklich.
Problem #1: Der client-Validierung von Metadaten wird nicht generiert, es sei denn, Sie haben eine Html.BeginForm() in Ihrer teilweise. Was in meinem Fall falsch ist, weil ich nicht aktualisieren, wird das gesamte Formular, update ich Teile es.
Lösung für Problem #1: Fügen Sie ein Formular in der Teilansicht, lassen MVC generieren Sie den client-Validierung von Metadaten und entfernen Sie die form-tags auf eine Aktion filter. Nennen wir diese Hack #1.
Problem #2: Der ersten client-Validierung von Metadaten für die Seite ist Weg von der Zeit ich habe die Metadaten für die neuen Inhalte.
Lösung für Problem #2: Speichern Sie die ursprünglichen Metadaten (hard copy) und aktualisieren Sie es mit der neuen fieds, als die Methoden aufrufen, die Sie erwähnt, lassen MVC wissen, neue Sachen eingetroffen. Nennen wir diese Hack #2.
Nun. Etwaige Verbesserungen würden geschätzt.
Hack #1: Wie kann ich die generieren Sie den client-Validierung von Metadaten, ohne dass eine tatsächliche form ?
HAck #2: Wie kann ich appent auf die Seite Validierung von Metadaten ?