加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 在mvc中的所有页面中维护查询字符串

发布时间:2020-12-16 03:46:40 所属栏目:asp.Net 来源:网络整理
导读:我需要在我的asp.net mvc(C#)应用程序的所有页面中维护查询字符串. 例如: 我将调用页面www.example.com?Preview=True.无论我在www.example.com点击哪一页,都应该维护查询字符串.即当我点击www.example.com上的关于我们页面时,网址应为www.example.com/About
我需要在我的asp.net mvc(C#)应用程序的所有页面中维护查询字符串.

例如:
我将调用页面www.example.com?Preview=True.无论我在www.example.com点击哪一页,都应该维护查询字符串.即当我点击www.example.com上的关于我们页面时,网址应为www.example.com/AboutUs?Preview=True

我怎样才能实现这一目标?什么是做这种常见手术的最佳场所.

解决方法

也许你需要一个自定义路线?:

public class PreviewRoute : System.Web.Routing.Route
{
    ...

    public override VirtualPathData GetVirtualPath(RequestContext requestContext,RouteValueDictionary values)
    {
        var preview = System.Web.HttpContext.Current.Session["Preview"];

        if (!values.ContainsKey("Preview"))
            values.Add("Preview",preview);

        var path = base.GetVirtualPath(requestContext,values);

        return path;
    }
}

}

随时设置会话[“预览”],您将获得所有网址?预览=真:

System.Web.HttpContext.Current.Session.Add("Preview",true);

更新:

在Global.asax.cs中使用此路由:

routes.Add("Default",new PreviewRoute("{controller}/{action}/{id}",new MvcRouteHandler()) {
        Defaults = new RouteValueDictionary(
            new { controller = "Home",action = "Index",id = "" }
        )
    }
);

代替:

routes.MapRouteLowercase(
    "Default",// Route name
    "{controller}/{action}/{id}",// URL with parameters
    new { controller = "Home",id = "" }  // Parameter defaults
);

你也可以尝试这个扩展:

public static class CustomRouteExtensions
{
    public static void MapPreviewRoute(this RouteCollection routes,string name,string url,object defaults) {
        routes.MapPreviewRoute(name,url,defaults,null);
    }

    public static void MapPreviewRoute(this RouteCollection routes,object defaults,object constraints) {
        if (routes == null) {
            throw new ArgumentNullException("routes");
        }

        if (url == null) {
            throw new ArgumentNullException("url");
        }

        var route = new PreviewRoute(url,new MvcRouteHandler()) {
            Defaults = new RouteValueDictionary(defaults),Constraints = new RouteValueDictionary(constraints)
        };

        if (String.IsNullOrEmpty(name)) {
            routes.Add(route);
        }
        else {
            routes.Add(name,route);
        }
    }
}

在Global.asax.cs中:

routes.MapPreviewRoute(
    "Default",id = "" }  // Parameter defaults
);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读