Проверка необходимого выбора в DropDownList - PullRequest
18 голосов
/ 12 января 2011

Моя модель представления определяет свойство, которое должно отображаться в поле со списком.Определение свойства:

[Required]
public int Processor { get; set; }

Я использую DropDownListFor для отображения комбинированного окна:

<%=Html.DropDownListFor(r => r.Processor, Model.Processors, Model.Processor)%>

Model.Processors содержит IEnumerable<SelectListItem> с одним специальным элементом, определенным как:

var noSelection = new SelectListItem
  {
    Text = String.Empty,
    Value = "0"
  };

Теперь мне нужно добавить проверку в поле со списком, чтобы пользователь должен был выбрать другое значение, отличное от «noSelection».Я надеялся на некоторую конфигурацию RequiredAttribute, но она не имеет значения по умолчанию.

Ответы [ 2 ]

26 голосов
/ 12 января 2011

Как насчет этого:

[Required]
public int? Processor { get; set; }

А потом:

<%= Html.DropDownListFor(
    x => x.Processor, Model.Processors, "-- select processor --"
) %>

И в вашем POST-действии

[HttpPost]
public ActionResult Index(MyViewModel model)
{
    if (ModelState.IsValid)
    {
        // the model is valid => you can safely use model.Processor.Value here:
        int processor = model.Processor.Value;
        // TODO: do something with this value
    }
    ...
}

И теперь вам больше не нужно вручнуюдобавьте элемент noSelection.Просто используйте правильную DropDownListFor перегрузку.

0 голосов
/ 28 сентября 2016

Одной из возможных проблем является то, что jQuery Validate запускает любые правила, если значение элемента пусто .

Обойти это можно, повторно запустив проверку , когда пользователь теряет фокус:

// select statements not firing null validation automatically
$("select").blur(function () { $(this).valid() });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...