9 Stimmen

JQuery-Validierung - form.valid() gibt immer true zurück

Ich habe eine Situation, wenn ich versuche zu überprüfen, ob ein Formular gültig ist, aber form.valid() gibt immer true zurück. Aber wenn ich versuche, die einzelne Steuerung zu validieren, gibt es false zurück.

Dies ist mein Formular:

    @using (Html.BeginForm("", "", FormMethod.Post, new { id = "tagsform" }))
    {
        @Html.ValidationMessageFor(x => x.EditTagsText)
        @Html.TextBoxFor(p => p.EditTagsText, new
           {
               @id = "txtprofileedittags"
           })
    }

Dies ist mein ViewModel:

[Required(AllowEmptyStrings = false, ErrorMessage = "Bitte geben Sie mindestens ein Tag ein ")]
public string EditTagsText { get; set; }

Dies ist der jQuery-Code:

   $('#tagsform').removeData("validator");
   $('#tagsform').removeData("unobtrusiveValidation");
   $.validator.unobtrusive.parse('#tagsform');
   $('#tagsform').validate();

Und bei einem Klick auf die Schaltfläche "Speichern":

var isValid = $('#tagsform').validate().element($('#txtprofileedittags')); <-- false
$('#tagsform').valid() true <--

Ich möchte auch, dass form.valid() false zurückgibt, was mache ich falsch?

8voto

Michael Bray Punkte 14660

Die Frage hat bereits eine akzeptierte Antwort, aber ich glaube, dass ich eine spezifischere Antwort gefunden habe. Ich habe festgestellt, dass wenn das ERSTE validierte Element im Formular ein "name"-Tag hat, funktioniert alles wie erwartet (d.h. .valid() gibt false zurück, wenn das Formular ungültig ist). Die akzeptierte Antwort enthielt praktischerweise ein "name"-Tag und deshalb hat es funktioniert.

In normalen Formularen benötigen Sie auf jeden Fall Namens-Tags, weil diese verwendet werden, wenn die Daten an den Server übermittelt werden. Aber in moderneren Umgebungen, wie z.B. die Verwendung von Knockout, gibt es keinen Grund, ein "name"-Tag zu haben, weil das Datenbindungssystem funktioniert, um Ihr Datenmodell aktuell zu halten.

4voto

Nouphal.M Punkte 6304

Sie sollten required dem Input hinzufügen

Sehen Sie sich das funktionierende Demo hier

Für unauffällige HTML 5-kompatible Attribute beschreiben Sie die Validatoren, die den Eingabefeldern angehängt werden sollen data-val="true".

Weitere Informationen finden Sie hier

-2voto

Carlos R Balebona Punkte 1150

Ich habe beide Dateien referenziert:

  • jquery.validate.js
  • jquery.validate.unobstrusive.js <-- entfernen Sie diese Referenz!

Das Entfernen der Referenz zu jquery.validate.unobstrusive.js hat das Problem für mich behoben

Ich hoffe, das hilft jemandem

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X