Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC应用程序中的后退按钮功能_Asp.net Mvc - Fatal编程技术网

Asp.net mvc MVC应用程序中的后退按钮功能

Asp.net mvc MVC应用程序中的后退按钮功能,asp.net-mvc,Asp.net Mvc,我需要在MVC2应用程序中实现后退按钮功能(在应用程序中使用显式后退按钮,而不是通过浏览器后退按钮) 我已经浏览了此处的链接,该链接建议使用Request.urlReferer。每当我有一个HTTP Get时,它都能很好地工作(因为它提供了querystring),但当上一个页面是一个没有querystring的HTTP POST时,我就面临这个问题 有人研究过这样的解决方案吗 我们最初的想法是生成和存储像Stack这样的链接,并在用户单击“后退”按钮时逐个弹出URL。但是,如果有更好的解决方案

我需要在MVC2应用程序中实现后退按钮功能(在应用程序中使用显式后退按钮,而不是通过浏览器后退按钮)

我已经浏览了此处的链接,该链接建议使用Request.urlReferer。每当我有一个HTTP Get时,它都能很好地工作(因为它提供了querystring),但当上一个页面是一个没有querystring的HTTP POST时,我就面临这个问题

有人研究过这样的解决方案吗


我们最初的想法是生成和存储像Stack这样的链接,并在用户单击“后退”按钮时逐个弹出URL。但是,如果有更好的解决方案\设计模式可以帮助我实现这一点?

您可以将返回URL存储到actionresult routevalues,并使用html帮助器进行反向链接

助手:

public static class HtmlHelpersExtensions
{
    public static MvcHtmlString BackLink(this HtmlHelper helper,string defaultAction)
    {
        string returnUrl = HttpContext.Current.Request["returnUrl"];
        // If there's return url param redirect to there
        if (!String.IsNullOrEmpty(returnUrl))
        {
            return new MvcHtmlString("<a href=" + returnUrl + " >Back</a>");
        }
        // if user just posted and there's no returnurl, redirect us to default
        else if (HttpContext.Current.Request.HttpMethod == "POST")
        {
            return helper.ActionLink("Back", defaultAction);
        }
        // we didn't post anything so we can safely go back to previous url
        return new MvcHtmlString("<a href=" + HttpContext.Current.Request.UrlReferrer.ToString() + " >Back</a>");
    }
}
用法:

@Html.ActionLink("MyAction", "MyAction", new { returnUrl = Request.RawUrl.ToString() })
MyAction.cshtml中的反向链接

@Html.BackLink("Index")

现在,帮助程序决定是使用returnUrl参数、默认操作还是通过UrlReferer将您带回。

您可以将returnUrl存储到actionresult routevalues,并使用html帮助程序进行反向链接

助手:

public static class HtmlHelpersExtensions
{
    public static MvcHtmlString BackLink(this HtmlHelper helper,string defaultAction)
    {
        string returnUrl = HttpContext.Current.Request["returnUrl"];
        // If there's return url param redirect to there
        if (!String.IsNullOrEmpty(returnUrl))
        {
            return new MvcHtmlString("<a href=" + returnUrl + " >Back</a>");
        }
        // if user just posted and there's no returnurl, redirect us to default
        else if (HttpContext.Current.Request.HttpMethod == "POST")
        {
            return helper.ActionLink("Back", defaultAction);
        }
        // we didn't post anything so we can safely go back to previous url
        return new MvcHtmlString("<a href=" + HttpContext.Current.Request.UrlReferrer.ToString() + " >Back</a>");
    }
}
用法:

@Html.ActionLink("MyAction", "MyAction", new { returnUrl = Request.RawUrl.ToString() })
MyAction.cshtml中的反向链接

@Html.BackLink("Index")

现在,助手决定是使用returnUrl参数、默认操作还是通过UrlReferer将您带回。

谢谢您的回复,sormii,我会尝试让您知道它是如何开始使用的,它工作得非常好,所以+1。只是不要在控制器上犯我犯的错误。我在删除操作中使用了RedirectToAction(returnUrl)而不是Redirect(returnUrl)。所以编辑有效,但删除重定向到错误的位置。谢谢你的回复sormii,我会尝试让你知道它是如何使用的。我已经开始使用它,它工作得很好,所以+1。只是不要在控制器上犯我犯的错误。我在删除操作中使用了RedirectToAction(returnUrl)而不是Redirect(returnUrl)。因此,编辑工作,但删除重定向到错误的位置。