В виде я добавляю объект типа person (для простоты). Однако проверка выпадающего списка, какой автомобиль из всех автомобилей выбрать (например), не будет отображаться перед публикацией. Позвольте мне уточнить.
В моем контроллере я настроил модель представления для передачи. Заполнение не является проблемой. Вот простые версии моделей.
public class PersonViewModel
{
public Person Person { get; set;}
public List<Car> Cars { get; set;}
}
public class Car
{
[Key]
public int CarId { get; set;}
[Required]
public string Name { get; set;}
}
public class Person
{
[Key]
public int PersonId { get; set;}
[Required]
public int CarId { get; set;}
[Required]
public string FullName { get; set;}
}
Хорошо, пока довольно просто. По мнению это проблема.
По виду:
@model PersonViewModel
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"
type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"
type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Add Person</legend>
<div class="editor-label">Car</div>
<div class="editor-field">
@Html.DropDownListFor(
m => m.Person.CarId,
new SelectList(
Model.Cars,
"CarId",
"Name",
0
),
"-- Select A Car --"
)
@Html.ValidationMessageFor(m=> m.Person.CarId)
</div>
<div class="editor-label">
@Html.LabelFor(m=> m.Person.FullName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Person.FullName)
@Html.ValidationMessageFor(model => model.Person.FullName)
</div>
<p>
<input type="submit" value="Create Person" />
</p>
</fieldset>
}
Когда это представление отображается, создается форма для создания человека. В форме генерируется выпадающий список с именами автомобилей, и доступно поле имени человека. Если выбрана машина и введено имя человека, нажимается кнопка «Создать», сообщение проходит без проблем.
Однако здесь есть расхождение. Если имя человека не заполнено и нажата кнопка «Создать», поле ввода выделяется красным цветом с сообщением о том, что имя необходимо. Если автомобиль не выбран, то форму отправят. В контроллере это легко поймать под if(ModelState.isValid)
, но я бы хотел указать пользователю, что у его персоны нет машины. Добавление поля [Required] public int CarId
к модели представления и последующая ссылка на него с помощью привязки остановит отправку формы, если автомобиль не выбран, но, похоже, является хакерским решением.
Причина, по которой проверка не проверяется, заключается в том, что по какой-то причине в сгенерированном <select>
html-объекте отсутствует добавленное оформление class="input-validation-error" data-val-required="The field is required." data-val-number="The field must be a number." data-val="true"
.
Как я могу убедиться, что это украшение включено?