我有一个包含许多控件的表单 - 没什么花哨的:
@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/