Имам страница с UpdatePanel, която съдържа повторител и текстово поле с броя на елементите в повторителя. Когато променя стойността, страницата трябва да публикува обратно и да преначертае повторителя с актуализирания брой елементи. Това работи по принцип, но страницата в крайна сметка е замразена след обратни публикации и не приема никаква информация - само в 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 дебъгерът не отчита нищо.