如何重定向到ASP.NET MVC中的调用页面?

时间:2009-01-30 10:51:49

标签: .net asp.net-mvc

假设我有一个控制器动作可以删除用户购物篮中的某个项目。通过对url~ / delete / {id}执行POST来触发此控制器操作。如果我的应用程序上有多个页面将发布到此URL,我如何构建控制器操作以重定向回发布到它的页面?

6 个答案:

答案 0 :(得分:11)

您应该从发布页面提供RedirectToUrl参数。

依赖引荐来源标题不是一个好习惯。

相反,做这样的事情:

public ActionResult Delete(int id, string RedirectToUrl)
{
  // check if RedirectToUrl is null or empty and redirect accordingly
}

在发布视图或部分视图上,您​​可以通过多种方式提供参数:

<%= Html.Hidden("RedirecToUrl","/my/lovely/url") %>

<form action="/item/delete/22?RedirectToUrl=/my/lovely/url">

我更喜欢第一种选择。

答案 1 :(得分:11)

这就是我的所作所为:

    public ActionResult ResendActivationEmail()
    {
        // Do other things here
        return new RedirectResult(Request.UrlReferrer.AbsoluteUri);
    }

答案 2 :(得分:2)

我要做的第一件事是使用Ajax.ActionLink,然后如果用户打开了Javascript,你就永远不会离开页面。这是最好的解决方案。如果您不想要链接,也可以使用Ajax表单。其中任何一个都可以使用DELETE或POST方法。

为了处理关闭Javascript的情况,当你在控制器中检测到POST没有使用Ajax(Request.IsAjaxRequest为false)时,你可以查看Request.UrlReferer属性来获取Url引用页面。如果这不为null,则可以使用RedirectResult返回此页面。如果为空,请选择默认目标网页 - 可能类似于“您的项目已被删除,请点击此处继续购物”。后者很可能很少受到打击。

答案 3 :(得分:0)

我从未尝试过,但您可以使用Referer标头来了解帖子或获取的来源,并尝试将URL与路径匹配。

答案 4 :(得分:0)

只需使用URL Referer [sic]标头即可。

var requestFrom = Request.UrlReferrer

您可以在以下网址找到相关文档:http://msdn.microsoft.com/en-us/library/system.web.httprequest.urlreferrer.aspx

唯一一次不起作用的是直接请求页面,但在这种情况下,你无论如何都没有任何地方可以重定向。

还可以选择使用AJAX执行唯一的异步操作,以便您的删除操作仅执行其描述的内容,并且不负责执行超出其预期删除目的的操作。

答案 5 :(得分:0)

如果您使用WCSF(Web客户端软件工厂)来实现MVC模式,您可以使用PageFlow进行所有导航。

例如: -

PageFlow.Next();或PageFlow.Previous();