альтернатива JQuery form.submit (), чтобы сделать сообщение AJAX - PullRequest
2 голосов
/ 30 марта 2010

У меня есть приложение mvc2 с таким видом

    <% using (Ajax.BeginForm("UserApprove", new { id = Model.id }, new AjaxOptions() { UpdateTargetId = "statusLights", OnSuccess = "HideButtons" }, new { id = "UserApprove" }))
   {%>

<input type="button" value="Approve" onclick="$('#dialogApprove').dialog('open')" />
<div id="dialogApprove" title="Confirm">
    <p>
        Are you sure you want to approve this request?
    </p>
</div>
<% } %>

К вашему сведению, контроллер возвращает частичное представление назад.

Раньше у меня не было диалогового окна jquery, а просто

<input type="Submit" value="Approve" /> 

, который раньше работал нормально

Я добавил диалог jquery, и у меня есть что-то подобное для инициализации диалога.

 $("#dialogApprove").dialog({
        autoOpen: false,
        draggable: true,
        resizable: false,
        buttons: {
            "Cancel": function() {

                $(this).dialog("close")
            },
            "Approve": function() {
                $("#UserApprove").submit();
                $(this).dialog("close");
            }
        }
    });

$ ("# UserApprove"). Submit (); кажется, не делает пост Ajax. Возвращается только текст из частичного представления, возвращенного на новой странице.

Я не хочу использовать плагин формы jquery, который имеет .ajaxSubmit (). Есть ли другой способ заставить сообщение ajax из диалогового окна «Подтвердить» в диалоговом окне jquery?

Ответы [ 4 ]

1 голос
/ 30 марта 2010

Если вы хотите придерживаться помощника MVC Ajax, вы должны добавить сообщение подтверждения в ваши AjaxOptions. Это будет использовать стандартный диалог подтверждения JavaScript, чтобы отобразить ваше сообщение и продолжить, только если действие подтверждено. Если вы хотите использовать диалоговое окно jQuery UI, то я бы предложил использовать обычную форму и сделать так, чтобы диалог отправлялся с использованием .ajax() или .post() в обработчике кнопок «Подтвердить». По сути, вы будете писать тот же код, который вставляет вспомогательный метод, чтобы выполнить публикацию с использованием AJAX, а затем заменить содержимое цели возвращенным HTML.

1 голос
/ 30 марта 2010

imho, MS MVC AJAX не работает. Я обнаружил, что гораздо лучше использовать jquery для отправки формы следующим образом:

$.ajax({
                        type: $("#UserApprove").attr("method"),
                        url: $("#UserApprove").attr("action"),
                        data: $("#UserApprove").serialize(),
                        success: function(data, textStatus, XMLHttpRequest) {
                            $("#SomeDiv").html(data); //replace the reports html.

                        },
                        error: function(XMLHttpRequest, textStatus, errorThrown) {

                            alert("Yikers! The AJAX form post didn't quite go as planned...");
                        }
                    });

Убедитесь, что вы используете партиал для визуализации данных и используете Request.IsAjaxRequest () для отправки данных в партиал.

Смотрите мой пост здесь для более полного кода.

1 голос
/ 30 марта 2010

Попробуйте:

$("#dialogApprove").dialog({
    autoOpen: false,
    draggable: true,
    resizable: false,
    buttons: {
        "Cancel": function() {

            $(this).dialog("close")
        },
        "Approve": function() {
            $.post($("#UserApprove").attr('action'), $("#UserApprove").serialize(), 
                   function(result) {
                    // result will be your partial view
                    $(this).dialog("close");
                   }
            );
        }
    }
});

Это опубликует вашу форму и вернет частичное представление в обратном вызове. `

1 голос
/ 30 марта 2010

вы пробовали $. Post () или $. Ajax () ?

"Approve": function() {
      var form = $('#userapprove');
      $.post(form.attr('action'), form.serialize());
      $(this).dialog("close");
}
...