ValidationMessage не отображается при использовании более чем одной модели
У меня есть форма, которая использует 2 модели, поэтому я включаю это следующим образом:
@model Equipment.Models.PublicViewModel
где PublicViewModel
namespace Equipment.Models
{
public class PublicViewModel
{
public Device Devices { get; set; }
public UserCredentials Data { get; set; }
}
}
Например, класс UserCredential выглядит так:
namespace Equipment.Models
{
public class UserCredentials
{
[Required]
public string UserName { get; set; }
[Required]
public string Password { get; set; }
}
}
и моя форма:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<hr />
@Html.ValidationSummary(true)
<div class="input-group">
@Html.LabelFor(model => model.Data.UserName, new { @class = " input-group-addon" })
@Html.TextBoxFor(model => model.Data.UserName, new { @class = "form-control" })<br />
@Html.ValidationMessageFor(model => model.Data.UserName)
</div>
...
<div class="input-group">
@Html.LabelFor(model => model.Devices.DeviceSerialNumber, new { @class = " input-group-addon" })
@Html.TextBoxFor(model => model.Devices.DeviceSerialNumber, new { @class = "form-control" })<br />
@Html.ValidationMessageFor(model => model.Devices.DeviceSerialNumber)
</div>
...
}
В другой форме, когда я использую только одну модель, все работает. Может кто-нибудь сказать мне, почему это не работает для 2 моделей?
1 ответ
Из этой ССЫЛКИ подтверждается, что на вложенных объектах проверка на стороне клиента невозможна. Только валидаторы уровня свойств могут генерировать проверку на стороне клиента.
Так что лучше использовать DataAnnotations, которые вы можете использовать FluentValidation.NET
как заявлено @Darin по этой ссылке
Еще один способ, который вы можете выбрать, - это иметь раздельное частичное представление для обеих моделей и вызывать эти представления из единого представления и передавать модели по мере необходимости для этих представлений.
Как это
<div class="input-group">
@Html.Partial("ViewForModelData", Model.Data)
</div>
<div class="input-group">
@Html.Partial("ViewForModelDevice", Model.Device)
</div>
Тогда вы можете иметь отдельную сводку валидации в обоих этих представлениях!