在Ajax调用之后遵循ASP.NET ActionResult

时间:2017-12-13 22:19:32

标签: javascript jquery asp.net ajax

控制器返回ActionResult,即:

public async Task<ActionResult> Delete(int? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }

    // do something

    return RedirectToAction("Index", "Orders", null });
}

这很好用,我在视图中使用了ActionLink。 但实际调用是通过Ajax完成的:

$.ajax({
    url: "/Orders/Delete",
    cache: false,
    data: { id: $("#btnCancel").data("id") }
}).done(function (response) {
    $("html").html(response);
});

使用:

$("html").html(response);

我正在尝试按照返回的html页面进行操作。 它不起作用:html呈现错误(布局和颜色不同)甚至地址不正确(当然它保留在当前页面上,而不是遵循Controller路径)。

我不确定这是否可以在jQuery中执行。 为什么我使用Ajax调用而不是ActionLink?因为我需要等待用户确认:

$("#btnCancel").click(function () {
    event.preventDefault();
    swal({
        title: "@Resources.MsgCancelOrderTitle",
        text: "@Resources.MsgCancelOrderText",
        type: "warning",
        showCancelButton: true,
        confirmButtonClass: "btn-danger",
        confirmButtonText: "@Resources.MsgCancelOrderConfirm",
        cancelButtonText: "@Resources.MsgCancelOrderCancel",
        closeOnConfirm: false,
        closeOnCancel: true
    },
        function (isConfirm) {
            if (isConfirm) {
                swal({
                    title: "@Resources.MsgCancelOrderSuccessTitle",
                    text: "@Resources.MsgCancelOrderSuccessText",
                    type: "success"
                },
                    function () {
                        $.ajax({
                            url: "/Orders/Delete",
                            cache: false,
                            data: { id: $("#btnCancel").data("id") }
                        }).done(function (response) {
                            $("html").html(response);
                        });
                    });
            }
        });
});

1 个答案:

答案 0 :(得分:1)

如果你想重定向到另一个视图,那么不要打扰ajax,它会破坏它的整个目的。通常,ajax调用返回一些数据(JSON或XML)或一小段HTML,它被设计为适合进行ajax调用的页面内的某个地方(通常在MVC中作为部分视图实现)。

如果您需要重定向,请按以下方式执行:

一旦用户通过警告框确认他们的选择,那么如果所需的请求使用GET方法(如您的示例),则只需使用相应的URL调用window.location.href即可。如果它正在使用POST,那么通常会有一个HTML表单,您可以指示自己提交。