【发布时间】:2020-07-18 11:36:15
【问题描述】:
我有一个使用 J 查询和 Ajax 的 asp.net MVC 应用程序。还有一个cshtml页面包含一个运行了很长时间的进程,所以我做了一个异步方法并使用ajax我能够触发它,所以希望用户可以在长进程运行时在不同的页面中做一些其他工作背景。
当我在同一页面上工作时,它工作正常。但是当我在后端运行代码时重定向到另一个页面时,我没有得到任何输出。在另一种方法运行时是否无法重定向?如果是这样,我该如何完成。
我的 c# 控制器
public async System.Threading.Tasks.Task<JsonResult> TestAsyncPro(string ComponentId)
{
try
{
await System.Threading.Tasks.Task.Delay(4000);
return Json(new { Success = true, Error = "" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
return Json(new { Success = false, Error = ex.Message }, JsonRequestBehavior.AllowGet);
}
}
Ajax 调用
$('#testasnc').click(function ()
{
$.ajax({
url: '../AccountOpening/TestAsyncPro',
type: 'POST',
dataType: 'json',
cache: false,
async: true,
data: { ComponentId: '21' },
success: function (data) {
if (data.Success == true)
{
$(window).scrollTop(0);
$("#alrtTestAsnc").show();
setTimeout(function () { $("#alrtTestAsnc").hide(); }, 5000);
}
}
});
var url = $("#RedirectTo").val();
location.href = url;
});
【问题讨论】:
-
重定向到另一个页面将中止任何正在进行的请求。当前页面中的所有脚本也都消失了,因此
success将永远不会被调用 -
那么我该怎么做呢?任何解决方法都会有所帮助
-
看看使用Hangfire 或类似的。正如@charlietfl 所说,请求在页面退出时结束。如果你有一个长时间运行的任务,你可以让 Hangfire 在后台执行它并在完成后更新一个数据库
-
@GlynnHurrell 是免费的吗?
-
是的,它 100% 免费。我相信开源
标签: c# jquery ajax asp.net-mvc asynchronous