一尘不染

如何获得ASP.NET MVC Ajax响应以重定向到新页面,而不是将视图插入UpdateTargetId?

c#

我正在使用Ajax.BeginForm创建一个窗体,它将执行ajax回发到某个控制器操作,然后如果该操作成功,则用户应被重定向到另一个页面(如果该操作失败,则使用AjaxOptions
UpdateTargetId)。

using (Ajax.BeginForm("Delete", null,
        new { userId = Model.UserId },
        new AjaxOptions { UpdateTargetId = "UserForm", LoadingElementId = "DeletingDiv" },
        new { name = "DeleteForm", id = "DeleteForm" }))
   {
    [HTML DELETE BUTTON]
   }

如果删除成功,我将返回重定向结果:

[Authorize]
public ActionResult Delete(Int32 UserId)
{
    UserRepository.DeleteUser(UserId);
    return Redirect(Url.Action("Index", "Home"));
}

但是Home Controller Index视图已被加载到UpdateTargetId中,因此我最终在页面中找到一个页面。我在考虑两件事:

  1. 我要么在构造这个错误,要么应该以不同的方式处理这种类型的操作(不使用Ajax)。
  2. 而不是返回重定向结果,而是返回其中包含JavaScript的视图,该视图在客户端进行重定向。

有人对#1有意见吗?或者,如果#2是一个好的解决方案,那么“重定向javascript视图”会是什么样?


阅读 255

收藏
2020-05-19

共1个答案

一尘不染

您可以使用它JavascriptResult来实现。

要重定向:

return JavaScript("window.location = 'http://www.google.co.uk'");

要重新加载当前页面:

return JavaScript("location.reload(true)");

似乎是最简单的选择。

2020-05-19