asp.net mvc сложные обновления ajax - PullRequest
1 голос
/ 27 ноября 2009

Я хотел бы выполнить несколько вызовов ajax определенным образом.

У меня есть страница. На этой странице 2 ViewUserControls, скажем, control1 и control2.

control1 имеет список Ajax.ActionLinks, которые вызывают control2 следующим образом:

<%= Ajax.ActionLink(page.Name, "PageDetails", new { pageSysName = page.SysName }, new AjaxOptions { UpdateTargetId = "pageEdit" })%>

control2 имеет форму Ajax, которая прекрасно обновляется. Метод Ajax.BeginForm выглядит следующим образом:

Ajax.BeginForm("SavePage", "Admin", new AjaxOptions { UpdateTargetId = "pageEditUpdated" })

Когда пользователь нажимает кнопку Сохранить, он в настоящее время обновляет div с именем pageEditUpdated с базовым типом содержимого («обновленный»), возвращаемым из контроллера.

Часть, на которой я остановился, состоит в том, как обновить control2, чтобы отразить новые изменения.

Подводя итог, страница имеет 2 элемента управления. Я бы хотел, чтобы control2 обновлял сам себя, а также обновлял div для уведомления пользователя о том, что обновление было выполнено.

Ответы [ 2 ]

2 голосов
/ 27 ноября 2009

Пусть ваш метод SavePage вернет частичное, которое отражает обновленное содержимое формы, включая сообщение об обновлении. Пусть цель обновления будет «внутренним контейнером» формы.

<% Ajax.BeginForm("SavePage", "Admin", new AjaxOptions { UpdateTargetId = "innerForm" }) { %}
   <div id="innerForm">
   <% Html.RenderPartial( "EditPageContents" ) %>
   </div>
<% } %>

Ваше действие сохранения должно затем вернуть

updatedModel.UpdateMessage = "updated";
return PartialView( "EditPageContents", updateModel );

и ваш частичный вид должен иметь

<% if (!string.IsNullOrEmpty( UpdateMesage )) { %>
   <%= Html.Encode( UpdateMessage ) %>
<% } %>

Честно говоря, было бы намного проще использовать jQuery для отправки формы через AJAX:

$(function() {
    $('form').submit( function() {
        $.post( $(this).attr('action'), $(this).serialize(), function(data) {
            $('#updateMessage').html(data).show();
        });
        return false;
    });
});
0 голосов
/ 03 декабря 2009

Я должен второй комментарий tvanfosson (я бы проголосовал за него, но моя репутация, видимо, еще недостаточно высока). Во всяком случае, когда я интегрировал функциональность Ajax с моим сайтом MVC, я обнаружил, что предоставляемые Microsoft методы Ajax довольно неуклюжи. Поэтому вместо этого я переключился на использование плагина jQuery.form (хорошие примеры здесь ). Я обнаружил, что с этим намного проще работать. Я только что создал пользовательские элементы управления MVC для раздела страницы, который хотел быть ajax, и просто перезагрузил этот пользовательский элемент управления как необходимый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...