Динамически генерируемый Ajax.BeginForm - PullRequest
0 голосов
/ 02 февраля 2010

У меня проблема с формами ASP.NET MVC Ajax. Я генерирую несколько Ajax-форм в таблице, например:

<% 
foreach (var item in Model)
       {
           var statefulItem = item as StatefulEffectiveItem; %>
    <tr>
        <td>
            <% using (Ajax.BeginForm("ShowAddActivity", "EffectiveItems", new { id = item.Id }, new AjaxOptions() { UpdateTargetId = "details", OnSuccess = "dialogIt" }))
               { %>
            <input type="submit" name="activity" value="Add Activity" />
            <% } %>
        </td>
    </tr>
    <% } %>

пока все хорошо. Когда я публикую одну из этих форм, она отображает частичное представление в div, и это новое частичное представление содержит новый Ajax.BeginForm (который НЕ вложен в форму отправителя). Этот второй Ajax.BeginForm абсолютно аналогичен тем, которые я генерирую в таблице, но когда я публикую его, я получаю не «сообщение Ajax», а обычное сообщение, которое отправляет меня на новую страницу. Я не понимаю, в чем причина различия между этими двумя Ajax-формами, почему эта «динамически генерируемая» Ajax-форма ведет себя как нормальная HTML-форма?

Кстати, я знаю, что могу сделать это по-разному, используя Javascript, но я хотел бы понять, можно ли это сделать, просто используя помощников MVC и Ajax Library, и, если ответ «да», где я неправильно.

Большое спасибо,

Wasp

Ответы [ 2 ]

2 голосов
/ 02 февраля 2010

Я не знаю, можно ли это сделать с помощью MS AJAX, но я могу сказать вам, что не так. После того, как вы обновите частичное на первом ajax, этот обновленный частичный содержит javascript для регистрации ajax для новой формы. Этот javascript не выполнен, потому что нет ничего, что говорит ему о выполнении. Вы должны вызвать функцию javascript, которая регистрирует ajax для второй формы при успешном обратном вызове первого запроса ajax.

0 голосов
/ 03 сентября 2013

Редактировать файл /scripts/jquery.unobtrusive-ajax.js

Изменить

$("a[data-ajax=true]").on("click", function (evt) { ..... }

К

$(document).on("click","a[data-ajax=true]", function (evt) { ...... }

Сделайте это для всех других регистраций событий в файле.

$(document).on("click","form[data-ajax=true] input[type=image]"
$(document).on("click","form[data-ajax=true] :submit"
$(document).on("submit","form[data-ajax=true]", 

Таким образом, вы регистрируете события в документе, что позволяет обрабатывать события для динамически добавляемых элементов. Ранее jQuery использовал .live (), но теперь вы можете сделать это, добавив обработчики событий в документ с помощью метода .on ().

...