【发布时间】:2011-01-11 20:17:43
【问题描述】:
我有一个带有 UpdatePanel 的页面,其中包含一个中继器和一个包含中继器中项目数的文本框。当我更改值时,页面应该回发并使用更新的项目数重新绘制中继器。这原则上可行,但页面在回发后最终冻结并且不接受任何输入 - 仅在 IE 8 中。它在 Firefox 中运行良好。例如,右键单击控件时不会出现上下文菜单,并且无法在文本框中输入文本。
当我取出 UpdatePanel 时,页面工作正常,但当然会在每个回发事件时刷新。这不一定与页面上的Repeater有关。我想我在其他页面上看到了这个。这里有什么诀窍?
<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 调试器不会报告任何内容。
【问题讨论】:
-
如果您能提供一个测试页以便我们可以看到这一点,这将有所帮助。
-
正在处理它。将发布一个链接。
-
所以我的赏金即将到期,但我没有看到值得奖励的答案。我会放手的。我没有解决方案,最终删除了更新面板。至少它是这样工作的。我认为问题是由于各种 MS Ajax 控件不合作,但我没有时间或兴趣深入了解问题。
标签: c# asp.net updatepanel postback repeater