/ / No se puede validar la selección elegida con jQuery Validate (no discreto) [duplicado] - jquery, asp.net-mvc-4, jquery-validate, jquery-elegido

No se puede validar la selección elegida con jQuery Validate (no discreto) [duplicado] - jquery, asp.net-mvc-4, jquery-validate, jquery-elegido

Estoy tratando de hacer una validación simple de DropDownList (clear jQuery - no discreto) en mi aplicación ASP.NET MVC 4.

Tengo campos en modelo:

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

Luego en el controlador hago:

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

Y en mi opinión:

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

En campos simples de TextBox todo funciona -valida mi campo al hacer clic en el botón Enviar. Pero DropDownList no muestra ningún mensaje cuando no elegí nada y dejo la selección "- wybierz płatnika -".

EDITAR

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

Respuestas

2 para la respuesta № 1
  1. Este es JavaScript, por lo que deberá mostrarnos el RENDIDO y código HTML relevante como lo ve el navegador, no su modelo, vista o controlador. Como no puedo ver su HTML renderizado, utilizo nombres genéricos en mi código de demostración a continuación.

    • El primero option elemento debe tener un value="" atributo.
    • los select elemento debe tener un name atributo incluso si no lo usa.

  2. No veo tu llamada al .validate() método. El complemento debe primero se inicializa con el .validate() método. No puedes usar el .rules() Método sin él.

jQuery:

$(document).ready(function () {

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

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

});

HTML renderizado:

<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 trabajo: http://jsfiddle.net/nwLqdemu/


No entiendo por qué estás usando el .rules() método. Por lo general, eso solo se usa cuando se deben agregar y quitar reglas dinamicamente; o cuando las reglas se aplican a un grupo completo de elementos a la vez, porque eso sería demasiado largo para ser incluido dentro del .validate() método.

De lo contrario, simplemente declararía reglas dentro del .validate() método tras la inicialización ...

$(document).ready(function () {

// INITIALIZE plugin

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

});

Demostración de trabajo 2: http://jsfiddle.net/nwLqdemu/1/


Consulte la página Wiki de SO Tag para obtener una demostración básica y sugerencias sobre el uso adecuado.


EDITAR:

Como nunca mencionaste usar el "Elegido"plugin para crear su lista desplegable, no hay forma de que alguien pueda haber respondido esta pregunta. Sin embargo, dado que el complemento jQuery Validate ignora los elementos ocultos de forma predeterminada, deberá cambiar el ignore opción a [] para "ignorar nada" y validar el elemento oculto por Chosen.