Нет атрибутов data-val * с частичным представлением - PullRequest
2 голосов
/ 13 июля 2011

У меня есть представление с 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; }

    }

Ответы [ 2 ]

2 голосов
/ 27 мая 2012

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

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

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

1 голос
/ 14 июля 2011

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

...