我试图在我的ASP.NET MVC 4应用程序中进行简单的DropDownList验证(清除jQuery - 没有不引人注目)。
我在模型中有字段:
[DisplayName("Wybierz płatnika")]
public virtual int? studyPayerId { get; set; }
public virtual IList<StudyPayer> PayersList { get; set; }
然后在控制器中我做:
var payers = RisDbPersistanceManager.RetrieveEquals<StudyPayer>("IsActive", true);
if (payers != null)
{
model.PayersList = payers; // it is populated
}
model.studyPayerId = null;
在我的观点中:
<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>
在简单的TextBox字段中,一切正常 - 在“提交”按钮单击上验证我的字段。但是当我没有选择任何内容时,DropDownList不显示任何消息,并留下“ - wybierzpłatnika - ”选择。
<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>
答案 0 :(得分:2)
这是JavaScript,因此您需要向我们展示浏览器看到的 RENDERED 和相关的HTML代码,而不是您的型号,视图或控制器。由于我无法看到您呈现的HTML,因此我在下面的演示代码中使用了通用命名。
option
元素必须具有value=""
属性。select
元素必须具有name
属性,即使您不使用它也是如此。
我看不到您对.validate()
方法的调用。插件 必须 首先使用.validate()
方法进行初始化。没有它,你不能使用.rules()
方法。
<强>的jQuery 强>:
$(document).ready(function () {
$('#myform').validate(); // <- INITIALIZE plugin
$('#studyPayerId').rules('add', {
required: true,
messages: {
required: "Proszę wybrać płatnika!"
}
});
});
呈现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>
工作演示:http://jsfiddle.net/nwLqdemu/
我不明白你为什么要使用.rules()
方法。通常仅在需要添加和删除规则时使用动态;或者当规则一次性应用于整个元素组时,因为它太长而不能包含在.validate()
方法中。
否则,您只需在初始化时在.validate()
方法中声明规则......
$(document).ready(function () {
// INITIALIZE plugin
$('#myform').validate({
rules: {
myselect: { // <- NAME attribute
required: true
}
},
messages: {
myselect: { // <- NAME attribute
required: "Proszę wybrać płatnika!"
}
}
});
});
工作演示2:http://jsfiddle.net/nwLqdemu/1/
<强> Please see the SO Tag Wiki page for a basic demo and hints on proper usage. 强>
修改强>:
由于您从未提及使用“选择”插件来创建下拉列表,因此没有人能够回答此问题。但是,由于jQuery Validate插件默认忽略隐藏元素,因此您需要将ignore
选项更改为[]
以“忽略任何内容”并验证选择隐藏的元素。