【问题标题】:ASP.NET 4.0 routing + ajax + browser historyASP.NET 4.0 路由 + ajax + 浏览器历史
【发布时间】:2010-06-16 14:00:32
【问题描述】:

ASP.NET 4.0 路由的问题是 Page.RouteData.Values 不包含链接中# 字符之后的参数

System.Web.Routing.RouteTable.Routes.MapPageRoute("ProjectViewRoute1", 
"project/{title}/{idProject}#{idDesign}", "~/ProjectView.aspx");

正如我所说,Page.RouteData.Values.ContainsKey("idDesign") 将返回 false

我想使用这个功能的原因是因为我使用 JavaScript 和 Ajax 来隐藏一些内容并加载新的内容,在用户看来就像加载不同的页面,他必须能够复制粘贴URL 并稍后查看该页面。

问题是:如何从 RoutedData 中获取{idDesign}

【问题讨论】:

    标签: ajax seo url-routing asp.net-4.0 browser-history


    【解决方案1】:

    浏览器不会将 URL 中 # 之后的数据发送到服务器;因此,ASP.Net 无法捕获该数据并将其提供给您。

    我建议使用? 而不是# 来获得您需要的功能,并包括一个AJAX 调用来捕获放置在url 的散列部分中的数据,以便在必要时发送到服务器,用于AJAX 创建的 url。

    使用 jQuery:

    $(function () {
        if (location.hash) {
            hash = location.hash.substr(1);
            location.hash = null;
            location.search = hash;
        }
    });
    

    【讨论】:

    • 如果我使用 ?字符我的页面将被刷新并从服务器重新加载。当我像这样从 JavaScript 设置 URL 时:window.location = example.com//page/subpage#idDesign 我的页面不会被刷新,我可以使用 ajax 轻松加载新页面。问题是要在服务器上返回 # 字符之后的字符串。我知道这可以通过某种方式完成。 Facebook 做到了,带有 ASP.NET Ajax 和 seo url 的 ASP.NET 也做到了。
    • 是的,Facebook 通过快速的 URL 重写来替换 ? 之后的所有内容。 # 之后的所有内容 - 这是我在回答的第二部分中推荐的内容。如果您需要,我可以提供来源。
    • 我继续为您提供源代码,因为我在另一个项目中拥有它。
    猜你喜欢
    • 2016-05-28
    • 1970-01-01
    • 2015-04-03
    • 2017-05-27
    • 2021-11-01
    • 1970-01-01
    • 2019-12-15
    • 2016-08-16
    • 2017-10-19
    相关资源
    最近更新 更多