【问题标题】:Redirecting a page with javascript concatenates values to the URL instead of redirecting?使用javascript重定向页面会将值连接到URL而不是重定向?
【发布时间】:2013-07-07 17:14:21
【问题描述】:

我有一个下拉菜单,允许用户选择要查看的数据馈送。用户第一次选择一个时,我的 URL 如下所示:

http://localhost/DataFeeds/Viewer/1

在第二个选择中,它看起来像这样:

http://localhost/DataFeeds/Viewer/1/2

这显然是不正确的。 1 应替换为 2

这是导致它的代码:

$('select#ID').change(function () {                
    window.location.replace("@Url.Action("Viewer", "DataFeeds")/" + $(this).val());
});

我已经试过了

window.location.href = "@Url.Action("Viewer", "DataFeeds")/" + $(this).val();

但它做同样的事情。

感谢所有建议。

【问题讨论】:

  • 看起来您是在连接两个字符串而不是替换 1。尝试使用 RegExp 或类似方法替换一个。
  • 在您的示例中window.location.href = url url 的值是什么?你能把一些调试器语句放进去看看当时发生了什么吗?

标签: javascript jquery url asp.net-mvc-4


【解决方案1】:

以下响应是错误的。 window.location.replace() 确实重定向,我的错!

实际上window.location.replace() 与window.location = url 相同,只是replace() 会从浏览器历史记录中删除旧位置,因此无法使用后退按钮。


不好的反应:

您正在替换未分配

window.location = window.location.replace("@Url.Action("Viewer", "DataFeeds")/" + $(this).val());


// This does not redirect it just grabs the string of the location and modifies it
window.location.replace("@Url.Action("Viewer", "DataFeeds")/" + $(this).val());

// is the same as doing
var redirectTo = window.location.replace("@Url.Action("Viewer", "DataFeeds")/" + $(this).val());

// you still need to do
window.location = redirectTo;

然而

如果它不像你说的那样工作,那么 replace("@Url.Action("Viewer", "DataFeeds")/" + $(this).val());有缺陷。

【讨论】:

  • 不..更改为 document.location ! :)
  • 没关系,我的萤火虫正在行动,我说从 window.location 切换到 document.location ..但没关系
  • 嗯,它重定向对了吗? ..这只是意味着您的替换表达式是错误的。
  • 然后替换("@Url.Action("Viewer", "DataFeeds")/" + $(this).val());有缺陷。 console.log() 看看你实际替换了什么
【解决方案2】:

堆栈溢出还有另一个答案可以回答这个问题。我遇到了同样的问题,发现我需要使用这里提到的 ?name= 语法: Passing dynamic javascript values using Url.action()

而不是使用这个:

$('select#ID').change(function () {                
    window.location.replace("@Url.Action("Viewer", "DataFeeds")/" + $(this).val());
});

尝试使用类似的东西:

$('select#ID').change(function () {                
    window.location.replace("@Url.Action("Viewer", "DataFeeds")?id=" + $(this).val());
});

使用 ?name= 语法时,我不再连接结尾。

【讨论】:

    猜你喜欢
    • 2017-12-06
    • 2016-08-28
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 2017-08-07
    • 2017-02-24
    相关资源
    最近更新 更多