草庐IT

javascript - 从 javascript 重定向到 Action

coder 2024-07-26 原文

我有一个 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) 来构建我的字符串,也会发生同样的事情。

有什么想法吗?

最佳答案

在为 Controller 操作生成 url 时,始终使用 url 助手。例如,如果您的重定向脚本位于 View 内,您可以这样做:

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

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

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

  • 使用在 View 内部计算并由您的脚本使用的全局 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 来生成注销 anchor ,而无需担心任何 javascript 或类似的东西,但希望它能为您提供一些真实场景的示例。

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

关于javascript - 从 javascript 重定向到 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20808536/

有关javascript - 从 javascript 重定向到 Action的更多相关文章

  1. ruby-on-rails - rails : How to make a form post to another controller action - 2

    我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak

  2. ruby-on-rails - 如何在 Rails Controller Action 上触发 Facebook 像素 - 2

    我有一个ruby​​onrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素

  3. ruby - 将 spawn() 的标准输出/标准错误重定向到 Ruby 中的字符串 - 2

    我想使用spawn(针对多个并发子进程)在Ruby中执行一个外部进程,并将标准输出或标准错误收集到一个字符串中,其方式类似于使用Python的子进程Popen.communicate()可以完成的操作。我尝试将:out/:err重定向到一个新的StringIO对象,但这会生成一个ArgumentError,并且临时重新定义$stdxxx会混淆子进程的输出。 最佳答案 如果你不喜欢popen,这是我的方法:r,w=IO.pipepid=Process.spawn(command,:out=>w,:err=>[:child,:out])

  4. ruby-on-rails - 优雅的 Rails : multiple routes, 相同的 Controller Action - 2

    让多条路线去同一条路的最优雅的方式是什么ControllerAction?我有:get'dashboard',to:'dashboard#index'get'dashboard/pending',to:'dashboard#index'get'dashboard/live',to:'dashboard#index'get'dashboard/sold',to:'dashboard#index'这很丑陋。有什么“更优雅”的建议吗?一个类轮的奖励积分。 最佳答案 为什么不只有一个路由和一个Controller操作,并根据传递给它的参数来

  5. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  6. ruby-on-rails - Rails Rspec 测试 Controller 新 Action - 2

    我正在尝试在我的Controller中测试新操作。目前它看起来像这样:Controllerdefnew@business=Business.new@business.addresses.buildend规范describe'GET#new'doit'assignsanewbusinessto@business'doget:newexpect(assigns(:business)).tobe_a_new(Business)endend我想测试“@business.addresses.build”这一行。我该怎么做?提前致谢! 最佳答案

  7. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

    我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

  8. ruby-on-rails - ApplicationController :Class 的未定义方法 `caches_action' - 2

    我正在尝试升级到Rails4beta1,但遇到了一些问题。简而言之,这就是我的应用程序Controller的样子。classApplicationControllercaches_action在Rails4中移到了它自己的gem中,因此包含gem应该可以解决问题。gem"actionpack-action_caching",github:"rails/actionpack-action_caching"但是当我运行我的请求规范或在浏览器中访问该应用程序时,我收到此错误。app/controllers/application_controller.rb:3:in`':undefinedm

  9. javascript - jQuery 的 jquery-1.10.2.min.map 正在触发 404(未找到) - 2

    我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文

  10. ruby-on-rails - 我将 Rails3 与 tinymce 一起使用。如何呈现用户关闭浏览器javascript然后输入xss? - 2

    我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如

随机推荐