繁体   English   中英

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

[英]How do you redirect to the calling page in ASP.NET MVC?

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

我就是做这个的:

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

您应该从发布页面提供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">

我更喜欢第一种选择。

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

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

我从来没有尝试过,但您可以使用Referer标头来了解post或get的来源,并尝试将URL与路由匹配。

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

var requestFrom = Request.UrlReferrer

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

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

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

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

例如:-

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM