从javascript重定向到操作

从javascript重定向到操作,javascript,asp.net-mvc-4,redirect,action,Javascript,Asp.net Mvc 4,Redirect,Action,我有一个MVC4项目,在客户端,我需要重定向到一个特定的操作方法。我已经阅读了以下帖子,下面有一条关于使用的评论: window.location.href = "/{controller}/{action}/{params}"; 我已经试过了,但是在IIS中安装我的项目的地方不起作用 我的项目已发布到:http://localhost/SomeName.SomeOtherName/ 我需要去:http://localhost/SomeName.SomeOtherName/Home/Logou

我有一个MVC4项目,在客户端,我需要重定向到一个特定的操作方法。我已经阅读了以下帖子,下面有一条关于使用的评论:

window.location.href = "/{controller}/{action}/{params}";
我已经试过了,但是在IIS中安装我的项目的地方不起作用

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

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

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

我试图将发布位置(与上面的发布字符串相同)保存在web.config文件中,并生成字符串(concatenate:publish location+'/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>
然后在脚本中的某个地方:

<script type="text/javascript">
    var logoutUrl = '@Url.Action("LogOut", "Home")';
</script>
window.location.href = logoutUrl;
$('#logout').click(function() {
    window.location.href = $(this).data('url');
});
  • 在某个DOM元素上使用HTML5 data-*属性,该元素将以某种方式和用户注销关联。例如,可以是某个div或按钮:

    <div id="logout" data-url="@Url.Action("LogOut", "Home")">Log out</div>
    
    显然,这似乎是一个愚蠢且过于简单的示例,因为在这种情况下,您只需使用
    Html.ActionLink
    来生成注销锚,而不必担心任何javascript或类似的事情,但希望它能为您的真实场景提供一些示例


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

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

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

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

    arrrg!非常感谢您的详细评论!我不确定不使用HTML助手的想法是什么。我们一直在使用var baseUrl=Request.Url.GetLeftPart(UriPartial.Authority)+Url.Content(“~”;