У меня есть страница с UpdatePanel, которая содержит Repeater и текстовое поле с количеством элементов в ретрансляторе. Когда я меняю значение, предполагается, что страница отправит ответ и перерисует Repeater с обновленным количеством элементов. В принципе это работает, но после обратной передачи страница зависает и не принимает никаких входных данных - только в IE 8. Он отлично работает в Firefox. Например, контекстное меню не появляется, когда я щелкаю правой кнопкой мыши в элементах управления, и я не могу вводить текст в текстовые поля.
Когда я вынимаю UpdatePanel, страница работает нормально, но, конечно же, обновляется при каждом обратном событии. Это не обязательно связано с ретранслятором на странице. Думаю, я вижу это на других страницах. В чем тут прикол?
<asp:UpdatePanel ID="uPanel" runat="server" UpdateMode="Conditional"
EnableViewState="true" ChildrenAsTriggers="true">
<ContentTemplate>
<asp:Panel ID="Panel1" runat="server" DefaultButton="btnSubmit">
<asp:TextBox ID="tbItems" runat="server" AutoPostback="true"
OnTextChanged="textchanged_Items"/>
<asp:Repeater id="rptItems" runat="server"
OnItemDataBound="repeaterItem_Databound">
<...>
</asp:Repeater>
protected void textchanged_Items(object sender, EventArgs e) {
try {
// this methods rebinds the repeater to a List after changing
// the number of items in the list
ReflowItemRepeater();
// This is not really necessary, since Databind() appears to
// cause an update. I tried it anyways.
uPanel.Update();
}
catch (Exception ex) {
ShowError(this, "Error displaying the item list.", ex, true);
}
}
В итоге я удалил панель обновлений.
Месяц спустя, на другой странице, я все еще и снова борюсь с этим. Ситуация такая же. Панель обновления, ретранслятор (на самом деле 2 вложенных ретранслятора) и элемент управления в ретрансляторе, который запускает событие обратной передачи. Сервер правильно обрабатывает событие и возвращает управление, но браузер (IE8) никогда не обновляет панель обновлений. Страница не отвечает, как будто в какой-то ситуации блокировки. Я могу разблокировать его, нажав кнопку, которая запускает другое событие обратной передачи (также на панели обновлений). Но текстовые поля на панели нельзя щелкнуть или изменить, когда это происходит. Кроме того, это бывает только в первый раз. Как только я «освободил» блокировку или что-то еще, это больше не повторится на этой странице, даже когда я повторю те же самые шаги, которые привели к этому.
Когда это происходит, отладчик JIT ни о чем не сообщает.