【问题标题】:When Using '/' character in history.pushState, MVC rewrite the URL在 history.pushState 中使用 '/' 字符时,MVC 重写 URL
【发布时间】:2015-07-21 15:03:56
【问题描述】:

我有一个没有任何特殊路由的 ASP.NET MVC 项目(使用默认路由)。我在我的项目中使用history.pushState 如下:(假设我们在products 页面中)

history.pushState(null, null, '#/param1/param2');

URL 更改为:www.domain.com/param1/param2,但我预期的是:www.domain.com/products#/param1/param2

请注意,如果我使用(例如)- 字符状态为 /,它会按预期工作。

没有JavaScriptC# 错误。

为什么没有按预期工作?

【问题讨论】:

  • 您的代码在我的最后工作正常,在我的情况下它重定向到http://localhost:52485/home/#/param1/param2
  • 顺便说一句,这与 ASP.NET MVC 无关。 history.pushState 严格位于 客户端 上正在执行的 JavaScript 和浏览器之间。
  • 是的,我知道代码在服务器端没有任何作用,只会对客户端产生影响,但我想知道,当我在简单的html 页面上使用该代码时,一切都是很好,但是在MVC 页面上,我提到了问题! (当然如果我使用-,我没有遇到这个问题)

标签: javascript c# asp.net-mvc pushstate


【解决方案1】:

您的调用似乎在 Firefox、Chrome 和 IE 上运行良好,但我仍然不排除它是特定于浏览器的。

你应该使用history.pushState({}, '', '#/param1/param2');

实际上,您可能需要考虑完全不使用history 作为哈希标签,而是使用location.hash

你可以这样使用它:

locaction.hash = '/param1/param2'

【讨论】:

  • 没错,我知道最好不要将#pushState 一起使用,但就我而言,我不想采取行动来处理params。 (我想,如果我不使用#,并且用户复制/param1/param2 并粘贴到新窗口中,我必须通过C# 端的操作来处理)
  • 顺便说一句,在发布此问题之前,我在pushState 中使用了{} instate of 'null'。 ('' [empty-string] 相同)
猜你喜欢
  • 2015-07-15
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 2011-04-23
  • 2016-03-28
相关资源
最近更新 更多