Проверка требуемого выбора в DropDownList
Моя модель просмотра определяет свойство, которое должно отображаться как поле со списком. Определение свойства:
[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
, но у нее нет значения по умолчанию.
Ответы
Ответ 1
Как насчет этого:
[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 перегрузку.
Ответ 2
Одна из возможных проблем заключается в том, что jQuery Validate выполняет запуск любых правил, если значение элемента пуст.
Вы можете обойти это с помощью повторной проверки валидации, когда пользователь теряет фокус:
// select statements not firing null validation automatically
$("select").blur(function () { $(this).valid() });