У меня есть страница MVC, которая загружает Partial через Ajax.ActionLink, который работает, а затем загруженный Partial содержит форму с Ajax.BeginForm. Эта форма не подключается к ненавязчивому ajax, а вместо этого выполняет обновление страницы (я проверил это в сетевом журнале браузера, который показывает, что инициатором, когда я нажимаю «Отправить», является браузер, а не jquery).
Я считаю, что проблема заключается в том, что, поскольку форма не существовала при загрузке страницы (но позже добавлялась через Ajax.ActionLink), то ненавязчивый ajax не видел атрибуты data-ajax во вновь добавленной форме и подключить необходимые события. Я предполагаю, что это происходит только в document.ready, а формы ajax тогда не существовало.
Могу ли я что-нибудь сделать, чтобы сказать: "Привет, Ненавязчивый Ajax, пожалуйста, взгляните на мою страницу еще раз, когда у меня есть несколько новых элементов, помеченных с помощью data-ajax, и подключите их"?
Спасибо.
Глядя на ненавязчивый источник ajax, он имеет следующее:
$("form[data-ajax=true]").live("submit", function (evt) {
var clickInfo = $(this).data(data_click) || [];
evt.preventDefault();
...
Сгенерированный тег формы выглядит следующим образом:
<form action="/Path/Create" class="form-horizontal" data-ajax="true" data-ajax-method="post" data-ajax-mode="replace" data-ajax-update="#ParentContainer" id="PathForm" method="post" novalidate="novalidate">
Насколько я могу судить, селектор события .live должен выбирать новую форму, когда она загружается на страницу. Однако форма находится внутри модального окна начальной загрузки, поэтому я не знаю, помешает ли это как-то всплыть событию.
Я даже могу запустить это в консоли Chrome:
$("form[data-ajax=true]").live("submit", function (evt) {
var clickInfo = $(this).data(data_click) || [];
evt.preventDefault(); });
И он успешно возвращает элемент формы, но когда я нажимаю кнопку «Отправить», он все равно полностью обновляет страницу. Я бы ожидал, что он, по крайней мере, ничего не сделает, так как я подключил его к preventDefault.
$(document).on("submit", "form[data-ajax=true]", function (evt) { evt.preventDefault(); return false });
- person AaronLS   schedule 08.11.2012