【问题标题】:Javascript redirect concatenates url linstead of redirectingJavascript重定向连接url而不是重定向
【发布时间】:2017-12-06 07:14:37
【问题描述】:

每当从文本框中更新值时,我都想调用控制器操作。

请注意,此脚本位于将从 Dispatch/Index 控制器操作返回的同一视图中

我试过这样做:

<script>
    $('#deliveryDate').change(function () {
        var date = $('#deliveryDate').val();
        var sDate = date.split('/');
        location.href = 'dispatch/' + sDate[0] + sDate[1] + sDate[2];
    });
</script>

并且在值第一次更改时它可以完美运行(即页面重定向到/dispatch/12122016)。

但是,当我再次更改该值时,它会重定向到/dispatch/dispatch/13122016,因此该值只是不断连接,这当然会产生错误。


我尝试将重定向行更改为 location.href = '@Url.Action("Index", "Dispatch")/' + sDate[0] + sDate[1] + sDate[2];,但现在它只是将新日期连接到 url,而不是将它重定向到我需要的方式...(即,它导航到 /dispatch/12122016/13122016

有没有什么方法可以在不包括文字 url 路径的情况下做到这一点?

如何在重定向我需要的操作之前“清除”当前 url(应该只是 dispatch/12122016

【问题讨论】:

  • dispatch 路由是相对于任何路径还是对于主机始终是绝对路径?
  • @ryeballar 只是来自主机。例如调试时完整的url是localhost:60775/dispatch/13122016

标签: javascript c# jquery asp.net-mvc redirect


【解决方案1】:

通过附加正斜杠试试这个。因为您在每个重定向上连接调度字符串

<script>
    $('#deliveryDate').change(function () {
        var date = $('#deliveryDate').val();
        var sDate = date.split('/');
         Var URL =  '/dispatch/' + sDate[0] + sDate[1] + sDate[2];
        Window.location.href = URL
    });
</script>

【讨论】:

  • 这与我的第一次尝试有何不同? (除了语法错误)
【解决方案2】:

只需在 URL 中添加一个正斜杠,这应该始终表明 url 更改始终是绝对的。

作为奖励:我还将/dispatch 之后的日期串联更改为连接。

$('#deliveryDate').change(function () {
    var date = $('#deliveryDate').val();
    location.href = '/dispatch/' + date.split('/').join('');
});

【讨论】:

  • 非常感谢,非常感谢!