/ / Não é possível validar Chosen select com jQuery Validate (não discreto) [duplicado] - jquery, asp.net-mvc-4, jquery-validate, jquery-escolhido

Não é possível validar Chosen select com jQuery Validate (não discreto) [duplicado] - jquery, asp.net-mvc-4, jquery-validate, jquery-escolhido

Eu estou tentando fazer uma validação simples do DropDownList (jQuery claro - sem obstrução) no meu aplicativo ASP.NET MVC 4.

Eu tenho campos no modelo:

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

Então no controlador eu faço:

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

E na minha opinião:

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

Em campos simples de TextBox, tudo funciona -valida meu campo ao clicar no botão Enviar. Mas o DropDownList não exibe nenhuma mensagem quando eu não escolhi nada e deixei a seleção "- 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>

Respostas:

2 para resposta № 1
  1. Isso é JavaScript, então você precisa nos mostrar o RENDERED e código HTML relevante conforme visto pelo navegador, não pelo seu modelo, visualização ou controlador. Como não consigo ver o HTML renderizado, uso nomes genéricos no meu código de demonstração abaixo.

    • O primeiro option elemento devo tenha um value="" atributo.
    • o select elemento devo tenha um name atributo, mesmo que você não o use.

  2. Não vejo sua ligação para o .validate() método. O plugin devo primeiro seja inicializado com o .validate() método. Você não pode usar o .rules() método sem ele.

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


Eu não entendo por que você está usando o .rules() método. Geralmente esse "s" é usado apenas quando as regras precisam ser adicionadas e removidas dinamicamente; ou quando as regras são aplicadas a um grupo inteiro de elementos de uma só vez, porque isso seria muito demorado para ser incluído no .validate() método.

Caso contrário, você simplesmente declararia regras dentro do .validate() método na inicialização ...

$(document).ready(function () {

// INITIALIZE plugin

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

});

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


Por favor, consulte a página do SO Tag Wiki para obter uma demonstração básica e dicas sobre o uso adequado.


EDITAR:

Como você nunca mencionou o uso do "Escolhido"Para criar sua lista suspensa, não há como alguém ter respondido a essa pergunta. No entanto, como o plug-in jQuery Validate ignora elementos ocultos por padrão, você precisará alterar o ignore opção para [] para "ignorar nada" e validar o elemento oculto por Chosen.