/ / Auswahl kann nicht validiert werden Auswahl mit jQuery validieren (nicht unauffällig) [duplizieren] - jquery, asp.net-mvc-4, jquery-validate, jquery-selected

Kann nicht validieren Ausgewählte Auswahl mit jQuery Validate (nicht unauffällig) [duplizieren] - jquery, asp.net-mvc-4, jquery-validate, jquery-chosen

Ich versuche, in meiner ASP.NET MVC 4-Anwendung eine einfache DropDownList-Validierung (eindeutige jQuery - nicht unauffällig) durchzuführen.

Ich habe Felder im Modell:

[DisplayName("Wybierz płatnika")]
public virtual int? studyPayerId { get; set; }
public virtual IList<StudyPayer> PayersList { get; set; }

Dann mache ich im Controller:

var payers = RisDbPersistanceManager.RetrieveEquals<StudyPayer>("IsActive", true);
if (payers != null)
{
model.PayersList = payers;  // it is populated
}
model.studyPayerId = null;

Und aus meiner Sicht:

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>

...

$("#studyPayerId").rules("add",
{
required: true,
messages: {
required: "Proszę wybrać płatnika!"
}
});
...
<div class="formsElement" >
<div class="formsElementLabel" >
@Html.LabelFor(x => x.studyPayerId)
</div>
<div class="formsElementInput" >
@Html.DropDownListFor(x => x.studyPayerId, new SelectList(Model.PayersList, "Id", "Name", Model.studyPayerId), "-- wybierz płatnika --")
@Html.ValidationMessageFor(x => x.studyPayerId)
</div>
</div>

In einfachen TextBox-Feldern funktioniert alles -Überprüft mein Feld beim Klicken auf die Schaltfläche "Senden". Aber DropDownList zeigt keine Nachricht an, wenn ich nichts ausgewählt und die Auswahl "- wybierz płatnika -" gelassen habe.

BEARBEITEN

  <select id="Gender" class="error" name="Gender" style="display: none;">
<label class="error" for="Gender">Proszę wybrać płeć!</label>
<div id="Gender_chosen" class="chosen-container chosen-container-single chosen-container-single-nosearch" style="width: 127px;" title="">
<a class="chosen-single" tabindex="-1">
<span>-- nieokreślona --</span>
<div>
</a>
<div class="chosen-drop" style="top: 34px; bottom: auto;">
</div>

Antworten:

2 für die Antwort № 1
  1. Dies ist JavaScript, daher müssen Sie uns das zeigen RENDERED und relevanter HTML-Code aus Sicht des Browsers, nicht Ihres Modells, Ihrer Ansicht oder Ihres Controllers. Da ich Ihr gerendertes HTML nicht sehen kann, verwende ich in meinem Demo-Code unten generische Namen.

    • Der Erste option Element Muss habe einen value="" Attribut.
    • Das select Element Muss habe einen name Attribut, auch wenn Sie es nicht verwenden.

  2. Ich sehe Ihren Anruf bei der .validate() Methode. Das Plugin Muss zuerst mit dem initialisiert werden .validate() Methode. Sie können das nicht verwenden .rules() Methode ohne es.

jQuery:

$(document).ready(function () {

$("#myform").validate(); // <- INITIALIZE plugin

$("#studyPayerId").rules("add", {
required: true,
messages: {
required: "Proszę wybrać płatnika!"
}
});

});

Gerendertes HTML:

<form id="myform">
<select name="myselect" id="studyPayerId">
<option value="">-- wybierz płatnika --</option>
<option value="1">option 1</option>
</select>
<br/>
<input type="submit" />
</form>

Arbeits-DEMO: http://jsfiddle.net/nwLqdemu/


Ich verstehe nicht, warum Sie das verwenden .rules() Methode. Normalerweise wird "s" nur verwendet, wenn Regeln hinzugefügt und entfernt werden müssen dynamisch;; oder wenn Regeln gleichzeitig auf eine ganze Gruppe von Elementen angewendet werden, weil dies zu langwierig wäre, um in die aufgenommen zu werden .validate() Methode.

Andernfalls würden Sie einfach Regeln innerhalb der deklarieren .validate() Methode bei der Initialisierung ...

$(document).ready(function () {

// INITIALIZE plugin

$("#myform").validate({
rules: {
myselect: {  // <- NAME attribute
required: true
}
},
messages: {
myselect: {  // <- NAME attribute
required: "Proszę wybrać płatnika!"
}
}
});

});

Working DEMO 2: http://jsfiddle.net/nwLqdemu/1/


Auf der SO Tag Wiki-Seite finden Sie eine grundlegende Demo und Hinweise zur richtigen Verwendung.


BEARBEITEN:

Da du nie erwähnt hast, die "Auserwählten" zu verwendenPlugin zum Erstellen Ihrer Dropdown-Liste, es gibt keine Möglichkeit, diese Frage zu beantworten. Da das jQuery Validate-Plugin jedoch versteckte Elemente standardmäßig ignoriert, müssen Sie das ändern ignore Option zu [] um "nichts zu ignorieren" und das von Chosen verborgene Element zu validieren.