#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.*
Семейство помощников ужасно именно по таким причинам.