我有一个 MVC4 项目,在客户端我需要重定向到特定的操作方法。我已阅读以下帖子如何从 JavaScript 方法重定向到操作?,下面有一条关于使用的评论:
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) 构建字符串,也会发生同样的事情。
有什么想法吗?
生成控制器操作的 url 时,始终使用 url 助手。例如,如果您的重定向脚本位于视图内,您可以这样做:
<script type="text/javascript">
window.location.href = '@Url.Action("LogOut", "Home")';
</script>
The 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,并考虑任何可能的虚拟目录。这是最重要的规则:never在 ASP.NET MVC 应用程序中硬编码 url。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)