2016-07-27 66 views
0

我有一個解析excel文檔的大方法。爲了解析整個excel,現在需要大約10分鐘(是的,這是一個非常大的ex​​cel文檔,有很多表單)。該方法在用戶從下拉列表中選擇特定值時調用。我正在使用以下塊函數來阻止面板向用戶顯示解析正在處理。我的更新面板沒有解鎖

function lockGridUI() { 
     $('#<%=UpdPnl_RevReports.ClientID%>').block({ 
      message: $('<img src="../Images/loaders/load.gif"/>') 

     }); 

問題是,如果我的Excel文檔需要超過4分鐘才能解析,我的面板將永遠被阻塞!我已經設置了取消阻止功能的時間,並且正在工作,但我不想添加超時以解除對我的面板的阻止,因爲我不知道Excel需要解析的時間。

我試着從後面的代碼如下:

string sScript = ""; 
    sScript = sScript + "function unlockUI() {"; 
    sScript = sScript + @"$('#<%=UpdPnl_RevReports.ClientID%>').unblock();" ; 
    sScript = sScript + "}"; 


    // REGISTER NOW. 
    Page.ClientScript.RegisterStartupScript(this.GetType(), "Registered Script", sScript, true); 

不幸的是,沒有運氣!我已經從方法末尾的代碼中調用了javascript函數,但仍然沒有運氣。

我不知道爲什麼即使我的方法完成,面板仍然被阻塞。

您能否給點建議?

+0

是否用戶期望從處理一些結果?最好立即向用戶返回「票證」並將處理置於後臺。在過程結束時,將結果保存到數據庫或文件的票證中。用戶然後可以使用他們的票證檢查結果。 –

回答

1

可以在代碼隱藏試試這個:

ScriptManager.RegisterStartupScript(this, this.GetType(), "Registered script", string.Format("$('#{0}').unblock();", UpdPnl_RevReports.ClientID), true); 

您也可以增加異步回發超時在的ScriptManager:

<asp:ScriptManager ID="scriptManager1" runat="server" AsyncPostBackTimeout="1800" /> 
+0

對不起,再次運氣! – apoellitsi

+0

我們可以看到(在問題中)調用此代碼的事件處理程序嗎?如果它不在同一個函數中,冗長的處理是在代碼隱藏中啓動的嗎? – ConnorsFan

+0

在我的方法存在之前,我正好調用該函數。當我添加一個斷點時,我可以看到它實際上從此代碼傳遞,然後該方法存在。 – apoellitsi