我正在研究MVC中的工具。当我上传文件时,我需要从中取出一些xls变量并将它们插入到数据库中。这可能需要30-40秒。我想在执行这个漫长的过程时向用户显示一些反馈。所以我添加了一个名为 GetImportStatus()的函数,它应该将prcessed变量返回给用户。我将此函数添加到执行数据库中插入的Controller。所以我的控制器看起来像是
public class AdminController : Controller
{
int currentIndex;
int totalVariables;
public ActionResult GetAllVariables()
{
//processing code here
totalVariables = Variables.Count;
}
//other stuffs here
public void InserVariablestToDatabase()
{
foreach(string variable in VariableList)
{
Insert(variable);
currentIndex++;
}
}
//other code here
public JsonResult GetImportStatus()
{
return Json((new { Current = currentIndex.ToString(), Total = totalVariables.ToString() }), JsonRequestBehavior.AllowGet);
}
}
我的观点有这一部分,
<div id="updateDiv"></div>
<script type="text/javascript">
function updateScreen() {
$.ajax({
type: 'GET',
url: '@Url.Action("GetImportStatus","Admin")',
content: "application/json; charset=utf-8",
success: function (data) {
$("#updateDiv").append("<strong>" + data + "</strong>");
}
});
}
$("#btnUploadFile").click(function ()
{ var id = setInterval(updateScreen, 1000); });
</script>
其中&#34; btnUploadFile&#34;是上传按钮。当我从firebug检查.NET面板时,我看到了请求,但在导入过程完成之前我没有得到任何响应。见下图
我做错了吗?
谢谢! :)
答案 0 :(得分:1)
我认为根据您的情况,您需要async methods。
private async void InserVariablestToDatabase()
{
....
}
public async Task<JsonResult> GetImportStatus()
{
....
}
你值得一读this。