MVC: So aktivieren Sie die clientseitige Validierung für ausgeblendete Felder

Lesezeit: 4 Minuten

Benutzer-Avatar
RollerCosta

@Skripte

 <script src="https://stackoverflow.com/questions/24572749/@Url.Content("~/Scripts/jquery-1.7.1.min.js")"></script>
  <script src="https://stackoverflow.com/questions/24572749/@Url.Content("~/Scripts/jquery.validate.js")"></script>
  <script src="https://stackoverflow.com/questions/24572749/@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")"></script>

@Aussicht

@using (Html.BeginForm("TestModelState", "RandD", FormMethod.Post, new {id="form123" }))
{ 
    @Html.TextBoxFor(x => x.htmlText, new { style="display:none"})<br />
    @Html.ValidationMessageFor(x => x.htmlText)
    <div>
      @Html.TextBoxFor(x => x.Uprop1)<br />
      @Html.ValidationMessageFor(x => x.Uprop1)
    </div>
    <input type="submit" value-="Submit" onclick="abc()" />
}

WAS ich probiert habe

  1. Ersetzt ignorieren: “:versteckt”, mit ignorieren: “”in validate.js
  2. var validateMeta = $(‘#form123’).validate(); validateMeta.settings.ignore = “”;

  3. $.validator.setDefaults({ignore: ""});

  4. $.validator.setDefaults({ ignore: [] });

  • Die clientseitige Validierung funktioniert, wenn ich “style=”display:none” aus dem Textfeld htmlText entferne.

    – RollerCosta

    4. Juli 2014 um 10:58 Uhr

  • @Stilgar, Sie müssen Ihr Wissen über MVC aktualisieren.

    – RollerCosta

    4. Juli 2014 um 11:14 Uhr


  • @RollerCosta können Sie mir gerne ein Update geben, nicht nur zu MVC, sondern im Allgemeinen, warum Sie etwas validieren sollten, das der Benutzer möglicherweise nicht eingeben kann.

    – Stillgar

    4. Juli 2014 um 11:17 Uhr

  • Sicher, ich habe nicht gesagt, dass der Benutzer keinen Wert eingeben kann. Ex. Wenn wir ein Formular in zwei Schritten senden müssen (Schritt 1 enthält n Felder und Schritt 2 enthält n Felder) mit dem Link „Weiter“ und „Zurück“ und der Schaltfläche „Senden“ in Schritt 2

    – RollerCosta

    4. Juli 2014 um 11:23 Uhr


  • Es gibt sicherlich gute Gründe, ein verstecktes Feld zu validieren. Stellen Sie sich beispielsweise ein WYSIWYG-HTML-Editor-Steuerelement vor, das ein verborgenes Feld zum Speichern des Textinhalts verwendet, während die Benutzeroberfläche ein separater Satz von Steuerelementen ist.

    – Erster Scheitelpunkt

    5. Januar 2015 um 15:28 Uhr

Benutzer-Avatar
Robin Hames

Ich bin auf dasselbe Problem gestoßen. Ein ausgeblendetes Feld auf einer Seite speicherte eine Benutzer-ID, die aus einem Textfeld zur automatischen Vervollständigung ausgewählt wurde. Diese ID wurde validiert, um sicherzustellen, dass eine Nicht-Null-ID zurückgesendet wurde. Wir wollten diese Validierung auf der Client-Seite einbinden.

Standardmäßig ignoriert jQuery validate versteckte Felder, Elemente mit einer Breite und Höhe von Null, solche mit css display:none und alle Elemente mit einem unsichtbaren übergeordneten Element (unter Verwendung derselben Kriterien).

Die Einstellung zum Ignorieren kann jedoch überschrieben werden, indem das folgende Skript hinzugefügt wird (ich habe es einfach zu meinem benutzerdefinierten Validierungsskript hinzugefügt, bevor ich $.validator.addMethod() aufrufe):

// By default validator ignores hidden fields.
// change the setting here to ignore nothing
$.validator.setDefaults({ ignore: null });

HINWEIS: Dieser Code funktioniert nicht, wenn er innerhalb von ausgeführt wird document ready oder jQuery $(function () {}) Methode.

  • Um dies zu ergänzen, können Sie auch eine benutzerdefinierte Funktion (anstelle von null) zurückgeben, der Sie Bedingungen hinzufügen können, wenn Sie nur auf bestimmte verborgene Felder abzielen möchten.

    – JDandChips

    15. Februar 2016 um 13:51 Uhr

  • Ich empfehle den Wert auf “:disabled” zu setzen.

    – HasanG

    27. April 2017 um 21:53 Uhr

  • Es ist erwähnenswert, dass dies nicht funktioniert, wenn es innerhalb von aufgerufen wird document ready (oder jQuery $(function () {})Shortcut)-Funktion

    – James McCormack

    1. Mai 2017 um 18:44 Uhr

  • Gut gespielt @JamesMcCormack, dieser Kommentar ist super relevant und ich bin einige Zeit daran hängen geblieben.

    – Andrew Duffy

    8. Juli 2017 um 2:02 Uhr


  • Siehe auch Siehe auch stackoverflow.com/a/38353576/292060 für @DJandChips Vorstellung von Bedingungen.

    – Gutes Auge

    31. Juli 2019 um 22:35 Uhr

Unmittelbar nachdem Sie das Skript zur Validierung eingefügt haben, setzen Sie das Ignorieren auf “”:

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    <script type="text/javascript">
    $.validator.setDefaults({
        ignore: ""
    });
    </script>
}

  • $.validator.setDefaults({ ignore: "" }); hat bei mir nicht funktioniert, aber $.validator.setDefaults({ ignore: [] }); tat. Als Referenz verwende ich: ASP.NET MVC 5, Bootstrap 3.3.6, Kendo UI 2016.1.112, jQuery 1.9.1 (in Kendo enthalten), jQuery Validation 1.14.0 und MS jQuery Unobtrusive Validation 3.2.2.

    – David Wilson

    29. Januar 2016 um 18:09 Uhr


  • Stellen Sie außerdem sicher, dass Sie dies nicht in Document.Ready() einfügen.

    – Simon

    27. Mai 2016 um 8:06 Uhr

  • @Simon, danke für diesen Kommentar … Ich habe jede Kombination ausprobiert, die ich im Internet finden konnte, aber ich habe sie innerhalb von Document.Ready () ausprobiert.

    – Matt Sanders

    21. September 2016 um 22:44 Uhr

Versuchen

 var validator = $("#form-id").data('validator');
 validator.settings.ignore = "";

  • Dies führte dazu, dass mein Formular nichts validierte.

    – Offir

    24. Juni 2020 um 12:04 Uhr

Ich bin mir nicht sicher, warum Sie Validierungen für Felder anzeigen müssen, die der Benutzer nicht sehen oder bearbeiten kann. Aber Sie können dies versuchen. Anstatt von display:noneanwenden visibility:hidden und height:0 zu Ihrem Eingabefeld.

@using (Html.BeginForm("TestModelState", "RandD", FormMethod.Post, new {id="form123" }))
{ 
    @Html.TextBoxFor(x => x.htmlText, new { style="visibility:hidden;height:0"})<br />
    @Html.ValidationMessageFor(x => x.htmlText)
    <div>
      @Html.TextBoxFor(x => x.Uprop1)<br />
      @Html.ValidationMessageFor(x => x.Uprop1)
    </div>
    <input type="submit" value-="Submit" onclick="abc()" />
}

var validator = $("#form-id").data("validator");    
validator.settings.ignore = ""; /* Set validator to ignore nothing. */
validator.form(); /* Validates the form, returns true if it is valid, false otherwise. */

console.log(validator.valid());
console.log(validator.errorList);

1187440cookie-checkMVC: So aktivieren Sie die clientseitige Validierung für ausgeblendete Felder

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy