Кнопка отправки не срабатывает для элементов, добавленных через ajax

#c# #jquery #ajax #asp.net-mvc #razor

#c# #jquery #ajax #asp.net-mvc #razor

Вопрос:

У меня есть представление mvc, которое содержит список элементов. Каждый элемент отображается с использованием частичного представления. Пользователь может редактировать, добавлять и удалять элементы в списке. Все это работает.

Однако, если пользователь добавляет элемент, элемент не может быть отредактирован до обновления страницы. Когда пользователь нажимает кнопку отправки, публикация не происходит. В Chrome dev Tools не отображается сетевая активность — ничего не происходит.

Выходной HTML-код одинаков для элементов, которые включены при начальной загрузке страницы, и элементов, добавленных через ajax.

 <form action="/booking/UpdateRoomFlow" data-ajax="true" data-ajax-method="POST" data-ajax-success="update_27365547" id="roomflowform_27365547" method="post" novalidate="novalidate"></form>
  

Я заметил, что когда я проверяю элемент в Chrome, форма не переносит поля формы, но когда я смотрю на view source, это происходит.

Я пробовал использовать Ajax.BeginForm, и я пытался сам записать HTML-код, в любом случае с теми же результатами.

Это Ajax.BeginForm…

  @using (Ajax.BeginForm(
    "UpdateRoomFlow",null,
    new AjaxOptions
    {
        HttpMethod = "POST",
        OnSuccess = targetfunction
    },
        new { @id = @formid, @novalidate = "novalidate"}))
    {
  

Есть идеи?

РЕДАКТИРОВАТЬ: Кое-что на заметку — эта форма помещается внутри тега tr над тегом td, что может вызвать проблему, поскольку это недопустимая разметка — однако, она работает во всех случаях, кроме элементов, добавленных с помощью вызова ajax.

Комментарии:

1. это просто кнопка отправки…

2. Окно «Проверить элемент» находится в режиме реального времени, а «Просмотреть источник» — нет, так что, похоже, это ваша проблема. Теперь вопрос в том, почему поля вашей формы не отображаются в вашей форме. Я бы предположил, что они либо перемещаются не в то место, либо где-то есть неверная разметка, из-за которой вся структура страницы становится странной (например, тег, который не закрывается).

3. Я не думаю, что проблема с формой, находящейся за пределами полей формы, заключается в том, что она одинакова для элементов, которые были включены при начальной загрузке страницы, и эти элементы могут быть обновлены обычным образом. РЕДАКТИРОВАТЬ — Фактически, вся процедура одинакова для элементов, которые создаются при загрузке страницы, и элементов, которые загружаются через ajax.

4. если вы опубликуете полную форму или просмотрите, это было бы полезно

Ответ №1:

<script> теги, включенные в HTML-ответ AJAX, удаляются, и поскольку Ajax.BeginForm добавляются теги скрипта в HTML, чтобы включить его функциональность, вы, по сути, получаете обычную старую форму, которая ничего не делает. Вы ничего не можете с этим поделать, поскольку браузеры удаляют <script> теги по соображениям безопасности. Ваш единственный выход — прекратить использование Ajax.BeginForm и написать свой собственный JS для обработки отправки AJAX, который затем вы можете включить в основное представление или внешний файл, который не будет затронут, что в любом случае неплохо. Ajax.* Семейство помощников ужасно именно по таким причинам.