来自View的ajax调用

时间:2014-04-17 06:05:39

标签: jquery asp.net-mvc


我正在研究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面板时,我看到了请求,但在导入过程完成之前我没有得到任何响应。见下图
enter image description here

我做错了吗?
谢谢! :)

1 个答案:

答案 0 :(得分:1)

我认为根据您的情况,您需要async methods

private async void InserVariablestToDatabase()
{
     ....
}

public async Task<JsonResult> GetImportStatus()
{
     ....
}

你值得一读this