从javascript重定向到操作

时间:2013-12-27 22:16:25

标签: javascript asp.net-mvc-4 redirect action

我有一个MVC4项目,在客户端我需要重定向到一个特定的操作方法。我已阅读以下帖子How to redirect to action from JavaScript method?,而且还有关于使用的评论:

window.location.href = "/{controller}/{action}/{params}";

我已经尝试过了,但是我的项目安装在IIS中的地方不起作用。

我的项目已发布到:http://localhost/SomeName.SomeOtherName/

我需要前往:http://localhost/SomeName.SomeOtherName/Home/Logout

当我按照上一篇文章的建议使用'/ Controller / Action'时,我会到这里:localhost/Home/Logout这是不正确的。

我试图在web.config文件中保留已发布的位置(与上面的发布字符串相同)并构建字符串(连接:发布位置+'/ Home / logout'),但这也无效。以下是我正在使用的stmt。奇怪的是,这只是将当前页面的url与我构建的url连接起来。这不仅无效,而且我还得到其中一个“潜在危险的request.path ...”错误。

 window.location.href = "\"" + url + "/Home/logout" + "\"";

如果我使用$(location.hostname)来构建我的字符串,也会发生同样的事情。

有什么想法吗?

2 个答案:

答案 0 :(得分:29)

在为控制器操作生成网址时,始终使用网址助手。例如,如果重定向的脚本位于视图内,则可以执行此操作:

<script type="text/javascript">
    window.location.href = '@Url.Action("LogOut", "Home")';
</script>

Url.Action服务器端帮助程序将确保无论您的应用程序是否托管在虚拟目录中,都会生成正确的URL。

如果在另一种情况下你的javascript位于一个单独的js文件中(这显然是最好的做法),你不能使用服务器端助手,那么你有几种可能性:

  • 使用在视图中计算并由脚本使用的全局javascript变量:

    <script type="text/javascript">
        var logoutUrl = '@Url.Action("LogOut", "Home")';
    </script>
    

    然后在你的脚本中的某个地方:

    window.location.href = logoutUrl;
    
  • 在某些DOM元素上使用HTML5 data- *属性,该元素将以某种方式与用户的注销相关联。例如,可能是一些div或按钮:

    <div id="logout" data-url="@Url.Action("LogOut", "Home")">Log out</div>
    

    然后在你的脚本中:

    $('#logout').click(function() {
        window.location.href = $(this).data('url');
    });
    

    显然这看起来像是一个愚蠢且过于简单的例子,因为在这种特殊情况下你只需使用Html.ActionLink来生成一个LogOut锚,而不必担心任何javascript或类似的东西,但希望它会提供你有一些真实场景的例子。

请注意,在所有示例中,如何使用url帮助程序为控制器操作生成正确的URL,并考虑任何可能的虚拟目录。这是最重要的规则:从不对ASP.NET MVC应用程序中的URL进行硬编码。

答案 1 :(得分:0)

虽然这似乎是随机的,但这确实涉及上述情况,因为一切都出现在动态弹出窗口中。有2个按钮(注销,继续)和图像。我无法正确显示图像,并希望使用帮助程序进行动态链接。我使用以下代码解决了这个问题:

  var siteRoot = "@(Request.Url.Scheme)://@(Request.Url.Host)@(Url.Content("~"))"; 

有人认为这有什么问题吗?所有其他URL帮助程序示例始终包含控制器和方法,我需要一个有效的完整根值。想法?