控制器返回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);
});
});
}
});
});
答案 0 :(得分:1)
如果你想重定向到另一个视图,那么不要打扰ajax,它会破坏它的整个目的。通常,ajax调用返回一些数据(JSON或XML)或一小段HTML,它被设计为适合进行ajax调用的页面内的某个地方(通常在MVC中作为部分视图实现)。
如果您需要重定向,请按以下方式执行:
一旦用户通过警告框确认他们的选择,那么如果所需的请求使用GET方法(如您的示例),则只需使用相应的URL调用window.location.href
即可。如果它正在使用POST,那么通常会有一个HTML表单,您可以指示自己提交。