我们有一个使用不显眼的jQuery验证的ASP.NET MVC 3应用程序。该页面允许在同一行程中将儿童对象添加到模型中。 <form>
包含儿童网格和一些用于添加新儿童的输入字段。jQuery不显眼的验证来验证表单的一部分
有问题,因为型号和子任务为孩子们简单的例子:
Issue.cshtml - >定义的形式,包括对问题领域以及其子任务。
@model Issue
@using (Html.BeginForm("Create", "Issues", FormMethod.Post, new { id = "mainForm" })
{
@Html.TextBoxFor(model => model.Summary)
@Html.Partial("SubtaskFields", new Subtask())
@Html.Partial("SubtasksGrid", model.Subtasks)
}
SubtaskFields.cshtml:
@model Subtask
@Html.TextBoxFor(model => model.Summary)
<button id="add">Add</button>
SubtasksGrid.cshtml:
@model IEnumerable<Subtask>
<table>
@foreach (var subtask in Model)
{
<tr>
<td>
@subtask.Name
<input type="hidden" name="Subtasks[@subtask.Index].Name" value="@subtask.Name"/>
</td>
</tr>
}
</table>
的一点是,提交表单,这个问题(Issue.Name,例如仅属性时),加上孩子的隐藏字段(Subtask.Name,例如)应该被验证和提交。
我们有一些JavaScript代码钩住了“添加”按钮,并且根据SubtaskFields.cshtml局部视图中的值添加了一个新的子任务。该脚本首先验证输入字段。为了达到这个目的,我们使用TextBoxFor
等html帮助程序为SubtaskFields.cshtml,渲染虚拟/默认子任务对象(new Subtask()
)。我们的javascript使用$("#mainForm").validate().element(...)
在添加新的子任务之前验证SubtaskFields。
的大问题,这种做法是jQuery的不引人注目的验证框架自动挂钩提交按钮,提交表单之前验证形式内的所有领域。即,即使是子任务字段也是有效的。这没有任何意义。假定子任务名称是强制性的(这意味着如果用户填写了子任务名称,用户只能点击“添加”)。但是,如果用户没有而不是点击“添加”,则子任务字段中的值没有任何意义,并且可以特别留空。在这种情况下,在我们当前的设置中,jQuery验证失败,因为必填字段留空。
这怎么解决?
嗨, 。我希望这个验证可以通过所有数据注释从视图模型中自动推断出来。 – chiccodoro