【问题标题】:ASP.NET MVC Routes - domain.com/Events#!/12 to domain.com/Events/12ASP.NET MVC 路由 - domain.com/Events#!/12 到 domain.com/Events/12
【发布时间】:2011-01-29 22:30:39
【问题描述】:

我正在使用 Ajax 更新网站中的一些部分,但现在我正在尝试做一些类似于 facebook 所做的事情。 当我更新一个部分的内容时,问题是我的 url 保持不变。如果我看到 facebook 示例:

http://www.facebook.com/guilhermegeek#!/guilhermegeek?sk=photos

此链接映射到:http://www.facebook.com/guilhermegeek?sk=photos

我已经知道如何为禁用 javascript 的人使用替代方法:<a onclick="javascript:updatecontent(); return false;" href="">

但我不知道如何像 Facebook 的示例那样编写我的路线。

如果我将网址更改为 mydomain.com/News#!/News/12,我应该如何将其路由到 mydomain.com/News/12

谢谢

【问题讨论】:

    标签: javascript asp.net-mvc asp.net-mvc-routing


    【解决方案1】:

    URL 的#(哈希,pund)符号后面的所有内容都从不发送到服务器。服务器只看到它之前的部分。只有客户端 javascript 可以使用 window.location.hash 并理解它。所以如果你想在你的应用程序中使用这样的东西,你应该保留默认路由,然后让一些 javascript 解析 # 符号后面的部分,并重定向到相应的 url。

    所以你的页面中可以有这样的东西:

    var h = window.location.hash;
    if (h != null) {
        var parts = window.location.href.split('#!/');
        if (parts.length > 1) {
            window.location.replace(parts[0] + '/' + parts[1]);
        }
    }
    

    【讨论】:

    • 所以我必须使用 javascript 在客户端进行路由?
    • @Guilherme,不,您在服务器上保留默认路由 {controller}/{action}/{id},然后使用 javascript 重定向。
    • 谢谢达林。我在你的帮助下解决了这个问题。我不得不将 window.location 更改为 window.location.replace("mydomain.com" + parts[1]);
    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 2017-01-14
    • 1970-01-01
    • 2011-05-30
    • 2014-12-10
    • 1970-01-01
    • 2013-02-14
    • 2019-01-02
    相关资源
    最近更新 更多