ページに 2 つのフォームがあります。ASP.NET MVC フレームワークによって自動的に生成されるため、最初のフォームで目立たない検証を使用する必要があります。ただし、目立たない検証を使用しないでください。
ここにいくつかのコードがあります:
@using (Html.BeginForm("Add", "Contacts", FormMethod.Post, new { id = "AddForm" }))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Datos Contacto</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ContactDepartmentID)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.ContactDepartmentID, (List<SelectListItem>)ViewBag.ContactDepartments)
@Html.ValidationMessageFor(model => model.ContactDepartmentID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Sex)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.Sex, (List<SelectListItem>)ViewBag.Sexs)
@Html.ValidationMessageFor(model => model.Sex)
</div>
</fieldset>
<br />
@Html.HiddenFor(model => model.SerializedEmails, new { data_bind = "value: ko.toJSON($root.emails())" })
@Html.HiddenFor(model => model.SerializedPhones, new { data_bind = "value: ko.toJSON($root.phones())" })
}
<form id="phoneForm" >
<fieldset>
<legend>Teléfonos</legend>
<table class="table">
<tbody data-bind="foreach: phones">
<tr>
<th>
Celular?
</th>
<th>
Phone
</th>
<th>
Extension
</th>
<th>
</th>
</tr>
<tr>
<td>
<input type="checkbox" data-bind="checked: isMobile" />
</td>
<td>
<input class="phone" data-bind='value: phone'/>
</td>
<td>
<input type="text" class="extension" data-bind='value: phoneExtension, enable: !isMobile() ' />
</td>
<td>
<a href='#' data-bind='click: $root.removePhone'>Delete</a>
</td>
</tr>
</tbody>
</table>
<a href='#' data-bind='click: $root.addPhone'>Agregar teléfono</a>
</fieldset>
</form>
<p>
<button onclick="Submit();" type="button" class="btn btn-primary" data-bind='enable: phones().length > 0 || emails().length > 0'>
Create</button>
</p>
JS:
function Submit()
{
var valid = $('#AddForm').valid();
var valid2 = $('#phoneForm').valid();
}
jQuery.validator.addClassRules("phone", {
required: true
});
補足として: ページから目立たない検証を削除すると、2 番目のフォームは検証されますが、最初のフォームは検証されません。目立たない検証を使用すると、最初のフォームは検証されますが、2 番目のフォームは検証されません。
クライアント側で検証全体を実行できることはわかっています。それが唯一の方法である場合は、実行します。目立たない検証を引き続き使用する方法を考えていましたが、カスタム属性などを使用して条件付きで無効にできるようにしました。