DropDownListFor Требуется ненавязчивая проверка. Отсутствие правильных атрибутов.

Этот вопрос похож, но принятый ответ решает его на стороне сервера, меня интересуют решения на стороне клиента.

Учитывая эту ViewModel

public class MyViewModel
{
    public string ID { get; set; }

    [Required(ErrorMessage = "I DEMAND YOU MAKE A CHOICE!")]
    [Display(Name = "Some Choice")]
    public int SomeChoice{ get; set; }   
    [Required(ErrorMessage = "I DEMAND YOU MAKE A CHOICE!")]
    [Display(Name = "Keyword")]
    public string Keyword { get; set; }    
}

и бритву

@Html.LabelFor(model => model.SomeChoice, new { @class = "label" }) @Html.DropDownListFor(model => model.SomeChoice, (SelectList)ViewBag.SomeChoice, "Select...") @Html.ValidationMessageFor(model => model.SomeChoice)

и предположим, что ViewBag.SomeChoice содержит список выбора

Визуализированный HTML-код не получает data-val = "true" data-val-required = "ТРЕБУЮ ВАС СДЕЛАТЬ ВЫБОР!" такие атрибуты, как @ Html.EditorFor (model => model.Keyword) или @ Html.TextBoxFor.

ПОЧЕМУ?

Добавление к нему class = "required"

@Html.DropDownListFor(model => model.SomeChoice, (SelectList)ViewBag.SomeChoice, "Select...", new { @class = "required" })

, которое использует семантику класса проверки jQuery и блокирует отправку, но не отображает сообщение. Я могу делать такие вещи

@Html.DropDownListFor(model => model.SomeChoice, (SelectList)ViewBag.SomeChoice, "Select...", new Dictionary { { "data-val", "true" }, { "data-val-required", "I DEMAND YOU MAKE A CHOICE!" } })

, которые помещают туда правильные атрибуты, блокируют отправку и показывают сообщение, но не используют в своих интересах RequiredAttribute ErrorMessage, которое у меня есть в моей модели просмотра

Так что кто-нибудь написал DropDownListFor который ведет себя как другие HtmlHelpers в отношении проверки?

РЕДАКТИРОВАТЬ Вот мой ТОЧНЫЙ код

в HomeController.cs

  public class MyViewModel
  {
    [Required(ErrorMessage = "I DEMAND YOU MAKE A CHOICE!")]
    [Display(Name = "Some Choice")]
    public int? SomeChoice { get; set; }
  }


    public ActionResult About()
    {
        var items = new[] { new SelectListItem { Text = "A", Value = "1" }, new SelectListItem { Text = "B", Value = "2" }, new SelectListItem { Text = "C", Value = "3" }, };
        ViewBag.SomeChoice = new SelectList(items,"Value", "Text");
        ViewData.Model = new MyViewModel {};
        return View();
    }

About.cshtml

@using Arc.Portal.Web.Host.Controllers
@model MyViewModel



@using (Html.BeginForm())
{
@Html.LabelFor(model => model.SomeChoice) @Html.DropDownListFor(model => model.SomeChoice, (SelectList)ViewBag.SomeChoice, "Select...") @Html.ValidationMessageFor(model => model.SomeChoice)
}

А вот визуализированный код

Он отправляет обратно в мой контроллер ... этого не должно происходить

7
задан Community 23 May 2017 в 12:00
поделиться