![](/img/trans.png)
[英]Redirect to asp.net page using JQUERY on asp.net button click from ajax modal extendar
[英]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.