2

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

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

更新 我的视图模型:

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

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

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

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

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

4

1 回答 1

3

首先,打开 javascript 控制台(例如,chrome 检查器面板)并查看您是否收到来自 jquery.unobtrusive-ajax.js的 Uncaught TypeError: Object [object Object] has no method 'live'错误。

如果您看到此错误,您可能正在使用 jquery 1.9.x 或更高版本。如果您选中“在导航时保留日志”(chrome),您会看到一条错误消息“ Uncaught SyntaxError: Unexpected token 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>

有关详细信息,请参阅此帖子

于 2013-11-13T19:18:37.693 回答