我有一个包含许多控件的表单 - 没什么特别的:
@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值。
为什么会发生这种情况,我该如何解决?
答案 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。