首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Button控件的ASP.net MVC超时问题

Button控件的ASP.net MVC超时问题
EN

Stack Overflow用户
提问于 2017-04-05 20:31:02
回答 1查看 456关注 0票数 1

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

代码语言:javascript
复制
@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()

代码语言:javascript
复制
 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();
            }
        });
    }
}

主计长:

代码语言:javascript
复制
[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在返回视图时正确执行所有操作,它只是挂断。我的猜测是,我的屏幕超时了,不接受来自控制器的任何响应。当我使用较小的数据集运行相同的进程时,从Controller查看获取值。知道这里会出什么问题吗?我的按钮设置有问题吗?感谢所有的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-05 20:47:57

Jquery默认超时值为0。这意味着在ajax中没有超时。如果浏览器有一些超时,完全有可能你会点击。

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

还有另一个挑战。ajax (XMLHttpRequest)有浏览器超时( browser timeout ),每个浏览器都有不同,特别是IE浏览器。我想是30分钟左右吧。从技术上讲,你可以把timeout : 10000000设置在2.30~3小时之间。

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

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

代码语言:javascript
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43241056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档