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>

Тогда вы можете иметь отдельную сводку валидации в обоих этих представлениях!

Другие вопросы по тегам