按钮控件的ASP.net MVC超时问题

时间:2017-04-05 20:31:02

标签: c# ajax asp.net-mvc devexpress

我有一个简单的asp.net mvc应用程序,带有一些开发控件。主屏幕有一个按钮,从屏幕上取日期并进行后端处理。 VIEW:

@Html.DevExpress().Button(settings =>
                {
                    settings.Name = "LoadData";
                    settings.Text = "Load Data";
                    settings.ToolTip = "Imports data from Holding API"; 
                    settings.ClientSideEvents.Click = "OnClick";
                    settings.UseSubmitBehavior = false;
                }).GetHtml()

 function OnClick(s, e) {
        positionDate = ReportingPositionDate.GetDate().toDateString();
       $.ajax({
            type: "POST",
            //url: "/ImportData/DataFileUpload",
            url: "@Url.Action("DataFileUpload", "ImportData")",
            data: JSON.stringify({ positionDate: positionDate }),
            dataType: "text",
            contentType: "application/json; charset=utf-8",
            beforeSend: function () { lpImport.Show(); },
            success: function (msg)
            {
                ImportDataGridView.PerformCallback();
                ImportSuccessMessage.SetVisible(true);
                ImportSuccessMessage.SetText(msg);
                lpImport.Hide();
            },
            Error: function (xhr) {
                alert(xhr)
                ImportDataGridView.PerformCallback();
            }
        });
    }
}

控制器:

[HttpPost]
public ActionResult DataFileUpload(string positionDate)
{
    // Reset validation error collection
    ImportDataValidationErrors = new List<ImportFileRecord>();
    string[] errs;
    try
    {
        ReturnVal ="Some Long Running Process"
        return Content(ReturnVal);
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

过程大约需要50分钟(或更长时间)才能运行(预期)。控制器方法DataFileUpload在返回View时正确执行所有操作,它只是挂起。我的猜测是我的屏幕超时并且不接受来自控制器的任何响应。 当我使用较小的数据集运行相同的过程时,从Controller查看获取值。知道这里可能出现什么问题吗?我的按钮设置有问题吗? 感谢所有帮助。

1 个答案:

答案 0 :(得分:0)

Jquery Ajax默认超时值为0.这意味着ajax中没有超时。如果浏览器有一些超时,那么你完全可以点击它。

只有在指定了超时选项时,jQuery才会调用setTimeout()。

还有另一个挑战。 ajax(XMLHttpRequest)存在浏览器超时,它对于每个浏览器尤其对于IE而言是不同的。我猜它大约30分钟左右。 从技术上讲,您可以将timeout : 10000000设置为2.30~3小时。

我之前遇到过这个问题。你可以用进度条来解决。使用进度条,您可以保持刷新视图。

对于您可以使用的简单ajax请求。

function uploadFile(){
    myApp.showProgressDialog; //show dialog
    var file=document.getElementById('fileName').files[0];
    var formData = new FormData();
    formData.append("file_name", file);
    ajax = new XMLHttpRequest();
    ajax.upload.addEventListener("progress", ProgressBarHandler, false);
    ajax.addEventListener("load", OnCompleteHandler, false);
    ajax.open("POST", "/to/action");
    ajax.send(formData);
}

function ProgressBarHandler(event){
    var percent = (event.loaded / event.total) * 100;
    $('.bar').width(percent); // its coming from css
}

function OnCompleteHandler(){
    myApp.hidePleaseWait(); //hide dialog
    $('.bar').width(100);
}