Я пытаюсь получить прогресс метода контроллера. Я использовал метод setInterval
для вызова метода progress внутри контроллера, но вызов ajax внутри setInterval
попадает в контроллер только после выполнения метода контроллера, и до этого времени состояние запросов ajax сохраняет pending
на вкладке сети браузера. .
Я рассмотрел создание первого метода асинхронного
Код Java Script
function Import() {
$('.loader').show();
var checked;
if ($('#chkNewCycle').is(":checked")) {
checked = 'on';
}
else {
checked = 'off';
}
var NewCycle = { IsNewCycle: checked };
$.ajax({
url: '/DataImport/Import',
type: 'POST',
data: NewCycle,
success: function (result) {
$('.loader').hide();
if (result == "success") {
window.clearInterval(intervalId);
alert("Imported file for processing.");
ClearData();
}
else {
alert(result);
}
}
});
var intervalId = window.setInterval(function () {
$.getJSON('/DataImport/GetProgress', function (json) {
console.log(json.Progress);
$('#progress').html(json.Progress + '%');
});
}, 2000);
}
controller.cs
public async Task<string> Import(string IsNewCycle)
{
/*Some Code*/
await Task.Run(() => {
/*Some Code*/
int iProgress =Convert.ToInt32(dProgress * 100);
HttpContext.Application["Progress" ] = iProgress;
});
return string;
}
public ActionResult GetProgress()
{
return Json(new
{
Progress = HttpContext.Application["Progress"]
}, JsonRequestBehavior.AllowGet);
}
Мне нужно получить обаметод контроллера ударил одновременно