Как я могу иметь иногда [Обязательное] поле модели, основанное на раскрывающемся списке, сохраняя при этом ненавязчивую проверку? - PullRequest
0 голосов
/ 28 июня 2019

В основном получил модель с двумя свойствами:

public int CatID {get; set;}

[Required]
public string CatName {get; set;}

При визуализации с использованием @Html.DropDownFor и TextBoxFor применяется ненавязчивая проверка, поэтому требуется CatName.

CatName отображается только в том случае, если установлено CatID, в противном случае для некоторого контейнера текстового поля будет установлено значение display: none. Ненавязчивая проверка не выполняется для скрытых элементов, поэтому это прекрасно работает, позволяя отправлять форму, если CatName не задано, потому что она не видна.

Однако в коде MVC состояние модели недопустимо, если CatName не установлено независимо от CatID.

Что мне нужно, так это способ применять условную валидацию как на сервере, так и на клиенте наилучшим образом.

Я могу заставить модель реализовать IValidatableObject для обработки на стороне сервера, реализовав свой собственный код для проверки полей, однако мне пришлось бы удалить атрибут [Required], который не позволил бы работать ненавязчивой проверке.

В идеале мне бы хотелось элегантное решение, которое бы позволяло проверять как на стороне клиента, так и на стороне сервера, и при этом иметь возможность использовать ModelState.IsValid в моем контроллере, который не супер-хакерский, но у меня нет идей. В идеале, я хочу, чтобы он управлялся атрибутами модели или моделью, поэтому проверка является автономной, то есть пользовательский интерфейс не должен иметь какой-либо специфичный для модели код - если я позже изменю модель, чтобы сказать, что она не требуется для пример, я не хочу обновлять мой интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...