У меня есть представление с Html.BeginForm (), которое вызывает частичное представление (упомянутое ниже и не имеет формы), передающее основную модель представления. Модель имеет аннотацию данных.
При начальной загрузке страницы проверка работает отлично, если я пытаюсь отправить без выбора правильных значений.
У меня также есть еще одна кнопка на странице, которая при нажатии загружает другой экземпляр того же частичного представления на странице, используя сообщение $ .ajax () в Controller, которое возвращает только PartialView, и добавляет его к существующему div.
Если я сейчас попытаюсь отправить форму этим динамическим элементам управления, хотя они привязаны к одной и той же модели, и хотя я установил правильные помощники .ValidationMessageFor, проверка для них не появится, так как элементы управления не создаются с помощью атрибуты data-val *.
Я использовал fiddler и обнаружил, что $ .ajax отправляет в контроллер, генерирует частичное представление с простым и без ValidationMessage, где также генерируется. Он не может использовать ненавязчивый JavaScript для динамических элементов управления, которые были добавлены.
Нужно ли всегда иметь представление внутри формы? В таком случае у меня будут вложенные формы, и это тоже не сработает.
РЕДАКТИРОВАТЬ 1:
Как упомянул Адам Тулипер в вопросе ViewContext.FormContext = new FormContext сгенерировал частичное представление со всеми атрибутами data-val *. Следовательно, отвечает на мой вопрос выше.
Теперь проверка динамического содержимого не выполнялась. так что согласно Erick (в разделе «Комментарии») я удалил валидатор формы [form.removeData (‘validator’);], а затем он также начал проверять динамический контент.
Ниже приведен частичный вид
<div id="divVehicleInfo">
<fieldset>
<legend>Vehicle Information</legend>
@for (var i = 0; i < Model.QuoteInput.Vehicle.Count(); i++)
{
<div class="editor-label">
@Html.LabelFor(model => model.Vehicle[i].VehicleMake)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Vehicle[i].VehicleMake)
@Html.ValidationMessageFor(model => model.Vehicle[i].VehicleMake)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Vehicle[i].VehicleModel)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Vehicle[i].VehicleModel)
@Html.ValidationMessageFor(model => model.Vehicle[i].VehicleModel)
</div>
}
</fieldset>
</div>
А это модель для частичного просмотра
public class Vehicle
{
public int VehicleID { get; set; }
[Required]
[DisplayName("Vehicle Make")]
public string VehicleMake { get; set; }
[Required]
[DisplayName("Vehicle Model")]
public string VehicleModel { get; set; }
}