0

Я уже давно застрял в этой проблеме и не могу найти что-либо в Интернете, которое помогает.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. Есть идеи?

enter image description here

+0

Каково просматривать с помощью 'TesterLocationCreateViewModel'? В этом случае вам также понадобится атрибут '[Обязательный]'. –

+0

Да, эта модель используется. Я просто добавил [Обязательно], но это не помогло:/ – AndeeC

+0

Хмм - что-то не имеет смысла, потому что если бы вы использовали модель представления без '' [UIHint] ', то' EditorFor() 'никогда бы не сгенерировал выпадающий список. –

ответ

1

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

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

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

@model WdcTesterManager.Models.RequestCreateViewModel 

 Смежные вопросы

  • Нет связанных вопросов^_^