您的位置 首页 asp.Net

asp.net-mvc – ASP.NET MVC如何实现返回上一页的链接?

标题说了这一切.

一些背景:
我有一个搜索机制 – 搜索视图,搜索结果视图和详细信息视图(代表一个结果项,如webforms中的formview).我想在详细信息视图中有一个链接,它会将用户返回到搜索结果视图.

思路:
只是阅读有关TempData的信息,但我想这没有用,因为用户可能会在他想要返回之前调用一些操作.

会话可能有效,但我不确定我应该如何处理它.

我不想用javascript来完成这个.

编辑:
似乎我会坚持使用eu-ge-ne的解决方案.结果如下:

#region usages

using System.Web.Mvc;
using CompanyName.UI.UIApp.Infrastructure.Enums;

#endregion

namespace CompanyName.UI.UIApp.Infrastructure.Filters
{
    /// <summary>
    /// Apply on action method to store URL of request in session
    /// </summary>
    public class RememberUrlAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting  
           (ActionExecutingContext filterContext)
        {
            var httpContext = filterContext.HttpContext;

            if (httpContext.Request.RequestType == "GET"
                && !httpContext.Request.IsAjaxRequest())
            {
                SessionManager
                .Save(SessionKey.PreviousUrl,SessionManager.Get(SessionKey.CurrentUrl) ??
                      httpContext.Request.Url);

                SessionManager
                .Save(SessionKey.CurrentUrl,httpContext.Request.Url);
            }
        }
    }
}

顺便问一下.IsAjaxRequest()方法是如何工作的?它只了解MS AJAX,还是比它更聪明?

解决方法

我认为你需要这样的自定义过滤器(未经过测试 – 目前没有VS):

public class PrevUrlAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var httpContext = filterContext.HttpContext;
        var session = filterContext.HttpContext.Session;

        if (httpContext.Request.RequestType == "GET"
            && !httpContext.Request.IsAjaxRequest())
        {
            session["PrevUrl"] = session["CurUrl"] ?? httpContext.Request.Url;
            session["CurUrl"] = httpContext.Request.Url;
        }
    }
}

关于作者: dawei

【声明】:金华站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

热门文章