繁体   English   中英

在 ASP.net MVC 5 应用程序中单击按钮时使用 JavaScript/jQuery 将用户重定向到页面

[英]Redirect user to a page using JavaScript/jQuery on button click in ASP.net MVC 5 application

我希望用户在提交表单后立即重定向到不同的页面。 我不关心调用控制器操作 httpost 时会发生什么。 我只希望用户在单击按钮或提交表单后立即重定向页面。 以下是我尝试过但不起作用的方法

cshtml 文件片段

<script>
    $(document).ready(function () {
        $('#formSubmitButton').click(function () {
            debugger;
            // Neither works
             window.location.href = "/Home/Index"; 
            window.location.href = "https://www.google.com";


        });
    });
</script>

家庭控制器

   public ActionResult Index()
        {
            return View();
        }

被击中的实际 httpost 控制器方法

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SavePayment(PaymentFormMV data)
{
    return View ("Hello")
}

我可以看到断点在 JavaScript 代码中被击中。 但是没有效果。 此外,正常的 post 调用按预期进行,并且 SavePayment 方法被调用,因此视图hello相应地。 为什么我无法通过单击按钮将用户重定向到索引页面。 我知道 SavePayment 最终会被调用,但为什么重定向不起作用。 我错过了什么吗?

编辑

这是整个故事。 客户正在付款,有些付款已超时。 当超时没有发生时,“Hello”重定向完全没问题。 所以基本上如果超时发生在 2 分钟内。 然后我会在将用户重定向到主页之前放置一个可能是 1.58 分钟的计时器。 如果 post 方法返回成功,则将调用“Hello.cshtml”。

但以防万一,如果 IIS 服务器将在 2 分钟后抛出time out exception ,那么我的 JavaScript 代码将在 IIS 启动之前超时(计时器设置为 1.58)并将用户重定向到主页。 我希望最终会发生的 IIS 超时错误不会覆盖用户已安全重定向的主页。 请指导我。 底线我不希望 IIS 踢出用户。 我没有在 JavaScript 代码片段中添加超时间隔代码,因为正常重定向本身不起作用。

因为,当您单击提交按钮时,表单被提交,HttpPost 操作方法将处理提交的表单数据并返回一个 ViewResult(从“Hello”视图生成的 html 标记)。 由于表单正在提交,因此它不会执行您设置window.location.href值的 JS 代码。

成功保存后,您应该在操作方法中进行重定向,例如PRG模式:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SavePayment(PaymentFormMV data)
{
    //do something
    return RedirectToAction("Index","Home"); 
}

如果您绝对想使用客户端脚本进行重定向,但希望提交和处理表单(就像一劳永逸的方式),您可以考虑进行 ajax 表单发布。

$('#formSubmitButton').click(function (e) {

   e.preventDefault();  // Prevent normal form submit

   var _form=$(this).closest("form");
   $.post(_form.attr("action"),_form.serialize(),function(res){
      // If you want to check the response and then do redirection
      // you should do it here. Make sure you return a json response from server then
   });
   window.location.href = "https://www.google.com";

});

编辑

根据相关编辑

这是整个故事。 客户正在付款,有些付款已超时。 当超时没有发生时,“Hello”重定向完全没问题。 所以基本上如果超时发生在 2 分钟内。 然后我会在将用户重定向到主页之前放置一个可能是 1.58 分钟的计时器。 如果 post 方法返回成功,则将调用“Hello.cshtml”。 但以防万一,如果 IIS 服务器将在 2 分钟后抛出超时异常,那么我的 JavaScript 代码将在 IIS 启动之前超时(计时器设置为 1.58)并将用户重定向到主页。 我希望最终会发生的 IIS 超时错误不会覆盖用户已安全重定向的主页。 底线我不希望 IIS 踢出用户。 我没有在 JavaScript 代码片段中添加超时间隔代码,因为正常重定向本身不起作用

我最初的回应是,不要在像这样的用户线程上花费 2 分钟的时间做任何事情。 这不是一个好的用户体验。 我不确定你从哪里得到 2 分钟的时间! 但我建议你修复需要这么长时间的代码。 您应该将其卸载为 ajax 调用(请参阅上面的示例 ajax 代码),如果您没有收到 200 OK 响应(或您的success回调),您可以在客户端做一些事情(向用户显示一条消息,以便他们可以再试一次)。 通过这种方式,您可以避免使用本地 JavaScript 计时器。

底线是:修复需要 2 分钟以上的代码! 可能有另一种方法来解决您的问题/用例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM