2

我有一个像这样的视图的 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

4 回答 4

1

你试过$.post()$.ajax()吗?

"Approve": function() {
      var form = $('#userapprove');
      $.post(form.attr('action'), form.serialize());
      $(this).dialog("close");
}
于 2010-03-30T16:19:51.653 回答
1

恕我直言,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() 将数据发送到部分。

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

于 2010-03-30T16:25:50.753 回答
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");
                   }
            );
        }
    }
});

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

于 2010-03-30T16:26:06.100 回答
1

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

于 2010-03-30T16:26:20.870 回答