我在最初隐藏的更新面板中有一个面板。当选择网格内的一行时,此面板将显示所选记录的详细信息。
在此面板中,我有一个下拉列表,用于执行回发以设置标签的文本。当回发发生时,面板再次变为不可见。我尝试为更新面板设置触发器并将其设置为下拉列表中的slectedindexchanged事件,但没有成功。我把这个更新面板放在另一个更新面板中,但没有运气。
<asp:UpdatePanel runat="server" ID="upnlDetail" RenderMode="Inline">
<ContentTemplate>
<asp:Panel runat="server" ID="pnlDetail" style="display:none">
<asp:DropDownList runat="server"
ID="ddlIDSID"
AutoPostBack="true"
DataSourceID="odsIDS"
DataTextField="IDSNAME_BK"
DataValueField="IDSID"
OnSelectedIndexChanged="ddlIDSID_SelectedIndexChanged">
</asp:DropDownList>
<asp:Label runat="server" ID="lblIDSSite" CssClass="NormalSmall" />
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
选择网格后,我使用javascript填充控件并使面板可见:
function populate(record) {
var oDetailPanel = document.getElementById('<%=pnlDetail.ClientID %>');
/* set up all controls */
oDetailPanel.style.display = "block";
}
答案 0 :(得分:1)
您可以在通话的页面加载中解决您的问题:
if(Page.IsPostback)
pnContent.Visible = true;
您可能必须执行IsAjaxPostBack
我认为是通过脚本管理器。
以下是我对更新小组的原因。
简而言之,在使用更新面板时,此问题非常很难修复。您应该使用自己的Ajax。
问题本身很常见。 超文本传输协议是无状态的,但 Asp.Net Web-Forms 会创建一个完整的生命周期,立即迫使某种形式的状态持久性进入您的应用程序。
帮助减轻这些压力的工具之一是众所周知的邪恶的更新面板。这个面板没什么特别之处,它只是将整个页面复制到内存中,然后通过Ajax执行 Postback 来命中服务器,而不会发生闪烁你通常做回发。
更新面板问题:
第三点是最常见的一个单一原因,它使你的代码成为一个圆圈。我想说的是,您的网页加载了什么。 更新面板触发,页面刷新。该页面通过客户端进行修改,更新面板触发器,页面刷新,无需客户端修改。
服务器不知道您的客户端更改,它不会持续存在 在记忆中。因此,当更新面板触发时,它会调用该页面 从服务器发送数据的最后一刻开始。
真正解决这个问题的唯一方法。您必须实施QueryStrings
和其他细微差别,以帮助确保服务器端和客户端保持同步。这将创造意大利面条非常快,所以希望你喜欢意大利面。
避免这些情况的最佳方法是利用 Web服务并发送您自己的 Ajax 以确保页面始终反映目标,因此当您的用户执行回发,您可以控制发送的数据。
希望这个解释详细解释了使用更新面板的缺陷。除非您可以避免使用 JavaScript 并完全依赖服务器,否则很可能以上述方式重做页面的速度要快得多。
我试图真实地传达为什么您应该使用自己的Ajax并自己完成,而无需通过更新面板自动应用数据。您不应该使用该面板,应该自己动手。