替代JQuery form.submit()来做ajax帖子

时间:2010-03-30 16:18:29

标签: jquery asp.net-mvc asp.net-mvc-2 jquery-dialog

我有一个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帖子。它只返回新页面中返回的局部视图中的文本。

我不想使用具有.ajaxSubmit()的jquery表单插件。有没有其他方法可以从jquery对话框“批准”按钮强制ajax帖子?

4 个答案:

答案 0 :(得分:1)

您是否尝试过$.post()$.ajax()

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

答案 1 :(得分:1)

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...");
                        }
                    });

确保使用partial来呈现数据,并使用Request.IsAjaxRequest()将数据发送到partial。

有关更完整的代码,请参阅我的帖子here

答案 2 :(得分:1)

尝试:

$("#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");
                   }
            );
        }
    }
});

这将发布您的表单并返回回调中的局部视图。 `

答案 3 :(得分:1)

如果您想坚持使用MVC Ajax帮助程序,则应该向AjaxOptions添加Confirm消息。这将使用标准的javascript确认对话框来显示您的消息,并且只有在确认操作后才会继续。如果你想使用jQuery UI对话框,那么我建议使用普通表单,并使用“Approve”按钮处理程序中的.ajax().post()提交对话框。基本上,您将编写与助手方法插入的相同的代码,以便使用AJAX执行帖子,然后使用返回的HTML替换目标的内容。