Нет атрибутов data-val* с частичным представлением

У меня есть представление с Html.BeginForm(), которое вызывает частичное представление (упомянуто ниже и не имеет формы), передавая в основной модели представления. Модель имеет аннотацию данных.

При первоначальной загрузке страницы проверка работает отлично, если я пытаюсь отправить без выбора правильных значений.

У меня также есть другая кнопка на странице, которая при нажатии загружает другой экземпляр того же частичного представления на странице, используя сообщение $.ajax() в Controller, которое возвращает только PartialView, и добавляет его к существующему div.

Если я сейчас попытаюсь отправить форму этим динамическим элементам управления, хотя они привязаны к одной и той же модели, и хотя я установил правильные помощники.ValidationMessageFor, проверка для них не появится, так как элементы управления не создаются с помощью data-val. * атрибуты.

я использовал fiddler и обнаружил, что $.ajax, отправляемый в контроллер, генерирует частичное представление с простым и без ValidationMessage, где также генерируется. Он не может использовать ненавязчивый JavaScript для динамических элементов управления, которые были добавлены.

Нужно ли всегда иметь представление внутри формы? В таком случае у меня будут вложенные формы, и это не сработает.

РЕДАКТИРОВАТЬ 1: Как упоминалось Адамом Тулипером в вопросе ViewContext.FormContext = new FormContext сгенерировал частичное представление со всеми атрибутами data-val*. Следовательно, отвечает на мой вопрос выше. Теперь проверка динамического содержимого не выполнялась. как и в случае с Эриком (в разделе "Комментарии"), я удалил валидатор формы [form.removeData("валидатор");], а затем он также начал проверять динамический контент.

Ниже приведен частичный вид

         <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; }

    }

2 ответа

Вам необходимо включить ненавязчивый сценарий проверки в частичном представлении.

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

Частичное представление не наследует сценарии страницы, на которой оно размещено, если только они не будут выполнены снова после обновления домена.

Как упомянуто Адамом Тулипером в вопросе ViewContext.FormContext = new FormContext генерирует частичное представление со всеми атрибутами data-val*. Следовательно, отвечает на мой вопрос выше. Теперь проверка динамического содержимого не выполнялась. так как в соответствии с Erick (в разделе комментариев), я удалил валидатор формы [form.removeData(‘validator’);], а затем он начал проверять динамический контент.

Другие вопросы по тегам