Asp.Net MVC 5 Html.DropDownList не проверяет

Я застрял в этой проблеме некоторое время и не могу найти ничего в Интернете, что помогло бы.

У меня есть Html.DropDownList в шаблоне редактора. Я использую этот шаблон в своей форме и ничего не выбираю для раскрывающегося списка. Когда я нажимаю «Отправить», я ожидаю, что форма уведомит меня о том, что требуемый раскрывающийся список не имеет выбранного значения, но это не так. Что я делаю не так?

Вот модели просмотра:

public class RequestCreateViewModel
{
    public int ID { get; set; }

    public TesterLocationCreateViewModel TesterLocationCreateViewModel { get; set; }

    ....

    public RequestCreateViewModel()
    {

    }
}

public class TesterLocationCreateViewModel
{
    public int ID { get; set; }

    [Required]
    [UIHint("OEM")]
    public string OEM { get; set; }

    [Required]
    [DisplayName("City")]
    public string LocationCity { get; set; }


    public TesterLocationCreateViewModel()
    {

    }
}

Вот фрагмент файла Create.cshtml

 @model WdcTesterManager.Models.Request

 @{
     ViewBag.Title = "Create Request";
     Layout = "~/Views/Shared/_Layout.cshtml";
 }

 <h2>Create Request</h2>

 @using (Html.BeginForm())
 {
       @Html.AntiForgeryToken()
       <div class="form-horizontal">
          @Html.ValidationSummary(true, "", new { @class = "text-danger" })
          <div class="form-group">
              @Html.EditorFor(model => model.TesterLocationCreateViewModel)
          </div>
       </div>
 }

Вот TesterLocationCreateViewModel.cshtml (шаблон редактора):

@model WdcTesterManager.Models.TesterLocationCreateViewModel

    <div class="col-md-6">
        <h4>Tester Location</h4>
        <div class="container-fluid">
            <div class="form-group">
                @Html.LabelFor(model => model.OEM, htmlAttributes: new { @class = "control-label col-md-4" })
                <div class="col-md-8">
                     @Html.DropDownList("OEM", (SelectList)ViewBag.OemList, "Choose one", new { @class = "form-control" })
                    @Html.ValidationMessageFor(model => model.OEM, "", new { @class = "text-danger" })
                </div>
            </div>               
            <div class="form-group">
                @Html.LabelFor(model => model.LocationCity, htmlAttributes: new { @class = "control-label col-md-4" })
                <div class="col-md-8">
                    @Html.EditorFor(model => model.LocationCity, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.LocationCity, "", new { @class = "text-danger" })
                </div>
            </div>               
        </div>
    </div>

Когда я отправляю форму, ничего не заполнив, я получаю сообщение об ошибке проверки для города, но ничего для OEM. Любые идеи?

введите здесь описание изображения


person AndeeC    schedule 23.04.2016    source источник
comment
Вы просматриваете с помощью TesterLocationCreateViewModel? В этом случае вам также понадобится атрибут [Required].   -  person    schedule 23.04.2016
comment
Да, он использует эту модель представления. Я только что добавил [Required], но это не помогло :/   -  person AndeeC    schedule 23.04.2016
comment
Хм - что-то не имеет смысла, потому что если бы вы использовали модель представления без [UIHint], то EditorFor() никогда бы не сгенерировал раскрывающийся список.   -  person    schedule 23.04.2016
comment
[UIHint] установлен в модели данных, и кажется, что его не нужно устанавливать в модели представления, поскольку он работает без моей установки в модели представления. меня тоже это смущает...   -  person AndeeC    schedule 23.04.2016
comment
Это невозможно. И вы получаете сообщение об ошибке для LocationCity, что также было бы невозможно, поскольку свойство в модели представления не помечено [Required]. Что-то не так с кодом, который вы показали.   -  person    schedule 23.04.2016
comment
@StephenMuecke спасибо, что указали на это! Я еще раз взглянул на свой код и понял, что Create.cshtml использует модель Request, а не RequestCreateViewModel. Я изменил его на это, и теперь я получаю правильные ошибки проверки: @model WdcTesterManager.Models.RequestCreateViewModel   -  person AndeeC    schedule 25.04.2016


Ответы (1)


@StephenMuecke указал, что с кодом что-то не так, поскольку код, похоже, ссылается на модель запроса, а не на модель представления запроса.

Итак, я еще раз взглянул на код и понял, что Create.cshtml использует модель запроса, а не RequestCreateViewModel.

Я получаю правильные ошибки проверки после изменения Create.cshtml для использования RequestCreateViewModel:

@model WdcTesterManager.Models.RequestCreateViewModel
person AndeeC    schedule 25.04.2016