MVC CheckBoxFor可以绕过不引人注目的验证

时间:2013-10-11 14:09:57

标签: asp.net-mvc razor checkbox unobtrusive-validation

我有一个包含许多控件的表单 - 没什么特别的:

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    <fieldset>
        <legend>EmployeeViewModel</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.Employee.Title)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Employee.Title)
etc.....

更新 我的ViewModel:

public class EmployeeCreateViewModel
    {
        public EmployeeCreateModel Employee { get; set; }
..etc

我的员工模特:

public class EmployeeCreateModel
    {
        [Required]
        public string Title { get; set; }

        [DisplayName("Job Title")]
        [Required]
        public string JobTitle { get; set; }

        public bool Active { get; set; }
...etc

问题 - 我正在使用不显眼的验证工作正常UNTIL我在表单中添加了一个复选框。无论复选框状态如何,都会提交表单,绕过客户端验证,并且服务器端验证会捕获错误。这是我的复选框:

<div class="editor-label">
   @Html.LabelFor(model => model.Employee.Active)
</div>
<div class="editor-field">
   @Html.CheckBoxFor(model => model.Employee.Active)
</div>

复选框模型属性不是必填字段,因此不需要验证它,并且当它到达控制器方法时我可以看到它具有有效的True / False值。

为什么会发生这种情况,我该如何解决?

1 个答案:

答案 0 :(得分:3)

首先,打开javascript控制台(例如,chrome检查器面板),看看你是否收到未捕获的TypeError:对象[object Object]没有来自jquery.unobtrusive-ajax的方法'live'错误。 JS。

如果您看到此错误,则可能使用的是jquery 1.9.x或更高版本。如果选中“保留登录导航”(chrome),则会看到错误“未捕获的SyntaxError:意外的令牌u ”。

要解决此问题,请在jquery 1.9.x之后包含jquery migrate 1.2.x。

<script src="/Scripts/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>

有关详细信息,请参阅此post