asp.net-mvc - MVC CheckBoxFor 导致绕过不引人注目的验证

标签 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.....

更新 我的 View 模型:

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>

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

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

最佳答案

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

如果您看到此错误,则您可能使用的是 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>

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

关于asp.net-mvc - MVC CheckBoxFor 导致绕过不引人注目的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19320289/

相关文章:

asp.net - 压缩过滤器 + MVC + Yahoo YSlow

asp.net-mvc-3 - 在MVC3中的WebGrid列中应用特定的宽度

java - 如何在 Android 中使用复选框管理布局

asp.net - 在处理请求之前找出 Controller 的名称和操作

asp.net-mvc - 针对各种应用程序的 Autofac 模块扫描

c# - MVC - 字符串或二进制数据将被截断。\r\n语句已终止

javascript - 输入超过最大宽度时动态扩展文本区域的高度

asp.net-core - ASP.NET Core 6 razor页面路由不同区域内的默认页面路由

html - 如何使用 check_box_tag 检查 Haml 中的复选框

javascript - 单击时更改输入 + 标签周围标签和 div 的颜色