我有一个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)来构建我的字符串,也会发生同样的事情。
有什么想法吗?
答案 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帮助程序示例始终包含控制器和方法,我需要一个有效的完整根值。想法?