首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让ASP.NET MVC Ajax响应重定向到新页面,而不是在UpdateTargetId中插入视图?

如何让ASP.NET MVC Ajax响应重定向到新页面,而不是在UpdateTargetId中插入视图?
EN

Stack Overflow用户
提问于 2009-10-08 15:23:09
回答 15查看 148.7K关注 0票数 93

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

代码语言:javascript
复制
using (Ajax.BeginForm("Delete", null,
        new { userId = Model.UserId },
        new AjaxOptions { UpdateTargetId = "UserForm", LoadingElementId = "DeletingDiv" },
        new { name = "DeleteForm", id = "DeleteForm" }))
   {
    [HTML DELETE BUTTON]
   }

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

代码语言:javascript
复制
[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视图”会是什么样子呢?

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2011-08-16 03:59:06

您可以使用JavascriptResult来实现这一点。

要重定向:

代码语言:javascript
复制
return JavaScript("window.location = 'http://www.google.co.uk'");

要重新加载当前页面,请执行以下操作:

代码语言:javascript
复制
return JavaScript("location.reload(true)");

似乎是最简单的选择。

票数 173
EN

Stack Overflow用户

发布于 2014-07-10 23:35:46

您可以返回一个带有URL的JSON,并在客户端使用JavaScript更改window.location。我更喜欢这种方式,而不是从服务器调用JavaScript函数,我认为这打破了关注点的分离。

服务器端:

代码语言:javascript
复制
return Json(new {result = "Redirect", url = Url.Action("ActionName", "ControllerName")});

客户端:

代码语言:javascript
复制
if (response.result == 'Redirect')
    window.location = response.url;

当然,您可以添加更多的逻辑,因为在服务器端可能会出现错误,在这种情况下,result属性可以指示这种情况并避免重定向。

票数 34
EN

Stack Overflow用户

发布于 2011-07-12 13:41:51

虽然不优雅,但在某些情况下对我来说是有效的。

控制器

代码语言:javascript
复制
if (RedirectToPage)
    return PartialView("JavascriptRedirect", new JavascriptRedirectModel("http://www.google.com"));
else
   ... return regular ajax partialview

模型

代码语言:javascript
复制
    public JavascriptRedirectModel(string location)
    {
        Location = location;
    }

    public string Location { get; set; }

/Views/Shared/JavascriptRedirect.cshtml

代码语言:javascript
复制
@model Models.Shared.JavascriptRedirectModel

<script type="text/javascript">
    window.location = '@Model.Location';
</script>
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1538523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档