【发布时间】:2015-12-14 17:17:04
【问题描述】:
我有一些 JavaScript 用于下拉列表,用于对产品库存页面上的结果进行排序。在 Internet Explorer 中,排序工作正常,浏览器处理得很好。但是在 Chrome 中它每次都会失败(你能相信吗,在 IE 中有效但在 Chrome 中无效?)
在 IE 中,当我使用“排序依据”选项时,URL 如下所示:
MyExampleSite.com/Supplies/Products/12345/MyProduct/?a=0
但是,当我在 Chrome 中执行“排序依据”选项时,URL 如下所示:
MyExampleSite.com/Supplies/Products/12345/MyProduct/?&a=0
如您所见,它在 URL 中添加了 amp,如果我继续尝试对其进行排序,则每次都添加一个额外的 amp。
这是导致我的问题的 JavaScript:
$("[name=a]").change(function () {
window.location = '@(this.Model.SortUri)' + '@(this.Model.SortUri.IndexOf('?') == -1 ? "?" : "&")a=' + this.value;
});
我的解决方案是像这样添加Html.Raw:
$("[name=a]").change(function () {
window.location = '@(this.Model.SortUri)' + '@Html.Raw(this.Model.SortUri.IndexOf('?') == -1 ? "?" : "&")a=' + this.value;
});
突然间,它在 IE 和 Chrome 中运行良好。
我的问题是为什么 Chrome 会这样做而不是 IE?
【问题讨论】:
-
@Html.Raw() 是 Razor 的一部分。这可能与 JavaScript 关系不大,而与 JavaScript 关系更大。还需要一个更好的标题 - 这有点令人困惑,因为问题询问为什么解决方案 确实 在两种浏览器中都有效。
-
我编辑了它。谢谢指点。
-
&不属于 url 编码,它是一个 html 实体......事实上 IE 接受它是不相关的,因为它首先不应该存在 -
尝试将 console.log 放在
this.Model.SortUri上,并确保它默认不包含?。
标签: javascript google-chrome internet-explorer razor