Есть ли способ вызвать проверку на стороне клиента для списка выбора, созданного DropDownListFor? Список выбора, который создается помощником, похоже, не получает атрибуты «data-val» или «data-val-required», которые текстовые вводы получают для проверки на стороне клиента.
Проверка выполняется на стороне сервера, когда я проверяю ModelState.IsValid, и затем на следующей странице загружается сообщение проверки.
Я установил параметр по умолчанию «Пожалуйста, выберите ...» в списке, потому что я хочу, чтобы пользователь должен был выбрать параметр (вместо того, чтобы он выбирал первый элемент в списке).
My View Модель:
public partial class ProvinceVM
{
[Required]
[Range(1, int.MaxValue)]
public int CountryId { get; set; }
[Required]
[StringLength(16)]
public string Abbreviation { get; set; }
[Required]
[StringLength(64)]
public string Name { get; set; }
}
Код в представлении:
<div class="editor-label">
@Html.LabelFor(model => model.CountryId, "Country")
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.CountryId, (IEnumerable<SelectListItem>)ViewBag.CountryId, "Please Select...")
@Html.ValidationMessageFor(model => model.CountryId)
</div>
И код моего контроллера:
[HttpPost]
public ActionResult Create(ProvinceEditVM provinceVM)
{
if (ModelState.IsValid)
{
var province = new Province() { CountryId = provinceVM.CountryId.Value, Abbreviation = provinceVM.Abbreviation, Name = provinceVM.Name };
_repo.Add<Province>(province);
_repo.SaveChanges();
return RedirectToAction("index");
}
ViewBag.CountryId = new SelectList(_repo.GetQuery<Country>().OrderBy(x => x.Name), "CountryId", "Name", provinceVM.CountryId);
return View(provinceVM);
}
Вещи, которые я уже пробовал:
- Превращение свойства CountryId модели Country в обнуляемое int (int?)
- Удаление атрибута Range для свойства CountryId
- Переименование ViewBag.CountryId во что-то другое (в случае возникновения конфликта с именем свойства модели представления)
Я легко могу сделать требуемое значение, используя jQuery, но я хочу убедиться, что я не пропускаю что-то уже встроенное; тем более, что в будущем я хотел бы добавить локализованные сообщения об ошибках культуры.