在ASP.net MVC 5应用程序中单击按钮时使用javascript/jquery将用户重定向到页面
我希望用户在提交表单后立即被重定向到其他页面。我不关心调用控制器操作httpost时会发生什么。我只希望用户在点击按钮或提交表单后立即重定向页面。下面是我尝试过的,但它不起作用 cshtml文件片段在ASP.net MVC 5应用程序中单击按钮时使用javascript/jquery将用户重定向到页面,javascript,jquery,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-5,Javascript,Jquery,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc 5,我希望用户在提交表单后立即被重定向到其他页面。我不关心调用控制器操作httpost时会发生什么。我只希望用户在点击按钮或提交表单后立即重定向页面。下面是我尝试过的,但它不起作用 cshtml文件片段 <script> $(document).ready(function () { $('#formSubmitButton').click(function () { debugger; // Neither wor
<script>
$(document).ready(function () {
$('#formSubmitButton').click(function () {
debugger;
// Neither works
window.location.href = "/Home/Index";
window.location.href = "https://www.google.com";
});
});
</script>
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SavePayment(PaymentFormMV data)
{
return View ("Hello")
}
命中的实际httpost控制器方法
<script>
$(document).ready(function () {
$('#formSubmitButton').click(function () {
debugger;
// Neither works
window.location.href = "/Home/Index";
window.location.href = "https://www.google.com";
});
});
</script>
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SavePayment(PaymentFormMV data)
{
return View ("Hello")
}
我可以在javascript代码中看到断点被击中。但没有效果。此外,正常的post调用将按预期进行,并调用SavePayment方法,因此相应地查看hello
。请引导我。为什么我不能重定向按钮上的用户点击索引页面。我知道最终会调用SavePayment,但为什么重定向不起作用呢。我错过什么了吗
编辑:
这里是整个故事。客户正在付款,有些付款超时。当超时没有发生时,“Hello”重定向是完全正常的。所以基本上如果超时发生在2分钟内。然后我会在将用户重定向到主页之前设置一个计时器,可能是1.58兆。如果post方法返回success,那么将调用“Hello.cshtml”。但万一IIS服务器将在2分钟后抛出超时异常,则我的Javascript代码将在IIS退出之前超时(计时器中设置了1.58),并将用户重定向到主页。我希望最终发生的IIS超时错误不会覆盖用户已安全重定向的主页。请引导我。底线我不想让IIS把用户踢出去。我没有在javascript代码片段中添加超时间隔代码,因为正常重定向本身不起作用。因为,当您单击submit按钮时,表单被提交,HttpPost操作方法将处理发布的表单数据并返回ViewResult(从“Hello”视图生成的html标记)。由于表单正在提交,因此它不会在设置
window.location.href
值的地方执行js代码
在成功执行保存后,您应该在操作方法中执行重定向,如PRG模式
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SavePayment(PaymentFormMV data)
{
//do something
return RedirectToAction("Index","Home");
}
如果您绝对希望使用客户端脚本进行重定向,但希望表单提交和处理(如FieldWordWrad),您可以考虑使用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
分钟。然后我会在5月15日前设置一个计时器
正在将用户重定向到主页。如果post方法返回success,则
将调用“Hello.cshtml”。但以防万一,如果IIS服务器
即将抛出超时异常,该异常在2分钟后
Javascript代码将在IIS退出之前超时(计时器中设置了1.58)
并将用户重定向到主页。我希望这段时间
最终将发生的out错误不会覆盖主页
该用户已被安全重定向。请引导我。底线一
不希望IIS将用户踢出。我没有添加超时
javascript代码段中的间隔代码是正常的
重定向本身不起作用
我最初的回答是,不要在这样一个用户线程上花费2分钟做任何事情。这不是一个好的用户体验。我不知道你从哪里得到2分钟的休息时间!但是我建议你修改代码,这需要很长时间。您应该将其卸载到可能是一个ajax调用(参见上面的ajax代码示例),如果您没有得到200 OK响应(或您的成功
回调),您可以在客户端执行一些操作(向用户显示一条消息,以便他们可以重试)。通过这种方式,您可以避免使用本地javascript计时器
底线是:修复需要2分钟以上时间的代码!可能有另一种方法来解决您的问题/用例。因为,当您单击submit按钮时,表单被提交,HttpPost操作方法将处理发布的表单数据并返回ViewResult(从“Hello”视图生成的html标记)。由于表单正在提交,因此它不会在设置
window.location.href
值的地方执行js代码
在成功执行保存后,您应该在操作方法中执行重定向,如PRG模式
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SavePayment(PaymentFormMV data)
{
//do something
return RedirectToAction("Index","Home");
}
如果您绝对希望使用客户端脚本进行重定向,但希望表单提交和处理(如FieldWordWrad),您可以考虑使用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
分钟。然后我会在5月15日前设置一个计时器
正在将用户重定向到主页。如果post方法返回success,则
将调用“Hello.cshtml”。但以防万一,如果IIS服务器
即将抛出超时异常,该异常在2分钟后
Javascript代码将在IIS退出之前超时(计时器中设置了1.58)
并将用户重定向到主页。我希望这段时间
最终将发生的out错误不会覆盖主页
该用户已被安全重定向。请引导我。底线一
不希望IIS将用户踢出。我没有添加超时
javascript代码段中的间隔代码是正常的
重定向本身不起作用