设置:
- 启用了客户端验证(+ 不显眼的 javascript)的 ASP.NET MVC 4。
- jQuery 1.8.2
- jquery.validate 1.10.0
- jquery.validate.unobtrusive
的HTML:
<form action="/" method="post">
<select data-val="true" data-val-required="DropDown is required." id="DropDown" name="DropDown">
<option value="">Select a letter</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<span data-valmsg-for="DropDown" data-valmsg-replace="true"></span>
<br/>
<button type="submit">Submit</button>
</form>
您可以在这里看到它的实际效果。
下拉菜单的服务器端代码非常无趣:
// View Model
public class ViewModel
{
[Required]
public string DropDown { get; set; }
}
// View
@Html.DropDownListFor(m => m.DropDown,
new SelectList(new[] { "A", "B", "C" }),
"Select a letter")
以下是查看问题的步骤:
- 用鼠标选择值之一(A、B、C)。
- 用鼠标选择默认的空值(选择一个字母)。不显示任何必需的消息。
- 使用箭头键,选择值之一(A、B、C)。
- 使用箭头键,选择默认的空值(选择一个字母)。这一次,将显示所需的消息。
- 用鼠标选择值之一(A、B、C)。所需消息消失。
- 用鼠标选择默认的空值(选择一个字母)。显示所需的消息。
似乎在第一次触发验证之前(通过使用键盘更改值或按下提交按钮),鼠标事件不会启动事件。任何关于为什么会发生这种情况的解释(我做错了什么?)或解决方法,将不胜感激。
谢谢!