Используйте @ Html.ValidationMessageFor или другую проверку (пользовательские сообщения) для чисто HTML-элементов в MVC

0

Поскольку я использую плагин под названием select2, мне нужно определить списки выбора в моем приложении в чистом Html (так без каких-либо помощников), например:

<select name="TopicIds" id="topDrop" multiple style="width: 700px" required>
            @foreach (var top in ((List<Topic>)ViewBag.TopIds).Where(top => top.MainTopic == null))
            {
                <option value="@top.TopicId" class="optionGroup">@top.Name</option>
                foreach (var subTopic in top.SubTopics)
                {
                    <option value="@subTopic.TopicId" class="optionChild">@subTopic.Name</option>
                }
            }
        </select>

Как вы видите, нужно выбрать один элемент, поэтому я установил атрибут "required".

Проверка выполняется, когда форма отправляется, она не проходит, когда в списке ничего не выбрано. Я хотел бы установить настраиваемое сообщение об ошибке, хотя при проверке поля.

Обычно вы должны использовать helper @html.ValidationMessageFor(), но это, похоже, не работает с этим чистым элементом управления html. Вы можете видеть, что список выбора привязан к свойству "TopicIds" в моей модели ViewModel.

Я пробовал это: @Html.ValidationMessageFor(model => model.TopicIds), единственным сообщением, которое я получаю, является значение по умолчанию "Это поле обязательно", как ни странно, только когда этот помощник определен...

Как настроить это сообщение? Я некоторое время занимался серфингом и пробовал всевозможные решения с помощью JavaScript и т.д., Но ничего не меняет сообщение, я всегда получаю "Это поле требуется".

Кто-нибудь знает, как это сделать? Я использую все это в веб-приложении ASP.NET MVC 4.

  • 0
    этот репозиторий github ivaynberg.github.io/select2 плагин select2, на который вы ссылаетесь
  • 0
    Да, это один;)
Теги:
validation
asp.net-mvc

1 ответ

0

Аннотировать свойство в вашей ViewModel

[Required(ErrorMessage = "My Custom Message")]
public string Id {get;set;}

Тогда вы Html.ValidationMessageFor

  • 0
    Я пробовал это, но это не работает. Если я не укажу обязательный атрибут для <select> проверка вообще не будет выполняться. Когда я указываю обязательный атрибут, я получаю стандарт «Это поле является обязательным атрибутом». который я не могу изменить ...
  • 0
    Я подозреваю, что требуемое сообщение, которое вы видите, генерируется браузером. Если вы удалите обязательный атрибут из элемента HTML и выполните стандартную проверку ModelState.IsValid в действии POST сервера, вы почти наверняка увидите правильное сообщение после обратной передачи, когда представление повторно отобразится. Чтобы использовать ненавязчивую проверку на стороне клиента, вам нужно написать методы, позволяющие вам вручную добавить правильные атрибуты data- * в элемент.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню