Javascript ASP.NET MVC根据Ajax请求更新HTML组件

Javascript ASP.NET MVC根据Ajax请求更新HTML组件,javascript,c#,ajax,asp.net-mvc,Javascript,C#,Ajax,Asp.net Mvc,有没有办法通过服务器端更新Ajax请求中的HTML进度条(或任何组件) 例如(模拟): JavaScript: $.ajax({ url: '/Sales/SaveStoreByType', type: 'POST', data: { locationId: id }, success: function (result) { ... }, error: function (xhr, ajaxOptions, thrownError) { ... }

有没有办法通过服务器端更新Ajax请求中的HTML进度条(或任何组件)

例如(模拟):

JavaScript:

$.ajax({
url: '/Sales/SaveStoreByType',
type: 'POST',
data: {
    locationId: id
},
success: function (result) {
         ...
},
 error: function (xhr, ajaxOptions, thrownError) {
         ...
},
update: function(percent){
   MyProgressBar('update',percent);
}
});
和服务器端:

public IActionResult SaveStoreByType(short locationId)
{
   foreach (var item in collection)
   {
     //here simule a heavy process and update progress bar
     i++;
     ajaxrequest.update(i);
   }
   return Json(new { error = 0 });
}

谢谢

您可以使用signar与服务器通信,并获取任务状态,以便更新de statusbar

但您也可以使用递归函数和setTimeout()函数在循环中发出请求,如下所示:

function viewProgress() {
    $.get('@Url.Action("GetTaskStatus", "YourController")', function (data) {
        if(data.Success){
            //finished
        }
        else{
            //update your status bar from data.Percent
            setTimeout(viewProgress(), 1000);
        }
    });
}

您的控制器中必须有一个操作:GetTaskStatus,该操作返回一个JsonResult,该对象包含Success和Percent属性

否。服务器端代码无法操作web浏览器,它只能返回响应。您试图做的事情听起来像是signar之类的合理用例,它有助于在客户端和服务器端代码之间实现更“实时”的体验。