/ / Impossible de valider Sélection sélectionnée avec jQuery Validation (non discret) [dupliquer] - jquery, asp.net-mvc-4, jquery-validate, jquery-selected

Impossible de valider Sélection choisie avec jQuery Valider (non discret) [dupliquer] - jquery, asp.net-mvc-4, jquery-validate, jquery-selected

J'essaie de faire une validation DropDownList simple (effacer jQuery - pas discret) dans mon application ASP.NET MVC 4.

J'ai des champs dans le modèle:

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

Ensuite, dans le contrôleur, je fais:

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

Et à mon avis:

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

Dans les champs TextBox simples, tout fonctionne -valide mon champ en cliquant sur le bouton Soumettre. Mais DropDownList n'affiche aucun message lorsque je n'ai rien choisi et laisse la sélection "- wybierz płatnika -".

MODIFIER

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

Réponses:

2 pour la réponse № 1
  1. Il s'agit de JavaScript, vous devrez donc nous montrer RENDU et le code HTML pertinent vu par le navigateur, pas votre modèle, vue ou contrôleur. Comme je ne peux pas voir votre code HTML rendu, j'utilise un nom générique dans mon code de démonstration ci-dessous.

    • La première option élément doit avoir un value="" attribut.
    • le select élément doit avoir un name attribut même si vous ne l'utilisez pas.

  2. Je ne vois pas votre appel au .validate() méthode. Le plugin doit obtenez d'abord initialisé avec le .validate() méthode. Vous ne pouvez pas utiliser le .rules() méthode sans elle.

jQuery:

$(document).ready(function () {

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

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

});

Rendu 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>

DEMO de travail: http://jsfiddle.net/nwLqdemu/


Je ne comprends pas pourquoi vous utilisez le .rules() méthode. Généralement, ce "s n'est utilisé que lorsque des règles doivent être ajoutées et supprimées dynamiquement; ou lorsque les règles sont appliquées à un groupe entier d'éléments à la fois, car ce serait trop long pour être inclus dans le .validate() méthode.

Sinon, vous "déclareriez simplement des règles dans le .validate() méthode lors de l'initialisation ...

$(document).ready(function () {

// INITIALIZE plugin

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

});

DEMO 2 de travail: http://jsfiddle.net/nwLqdemu/1/


Veuillez consulter la page Wiki SO Tag pour une démonstration de base et des conseils sur la bonne utilisation.


MODIFIER:

Puisque vous n'avez jamais mentionné d'utiliser le "Chosen"plugin pour créer votre liste déroulante, il n'y a aucun moyen que quelqu'un puisse répondre à cette question. Cependant, comme le plugin jQuery Validate ignore les éléments cachés par défaut, vous devrez modifier le ignore option de [] afin de "ne rien ignorer" et de valider l'élément caché par Chosen.