2016-07-27 4 views
0

У меня есть большой метод, который анализирует документ excel. Для того, чтобы разобрать все превосходство, ему нужно около 10 минут (да, это очень большой документ с большим количеством листов). Метод вызывается, когда пользователь выбирает конкретное значение из выпадающего списка. Я использую следующую функцию блока, чтобы заблокировать панель, чтобы показать пользователю, что обработка синтаксического анализа обрабатывается.Моя панель обновления не разблокирована

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

     }); 

Проблема заключается в том, что если мой первенствовать документ нуждается в более чем 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