回发内部更新面板问题

时间:2015-01-29 20:04:38

标签: c# updatepanel postback

我在最初隐藏的更新面板中有一个面板。当选择网格内的一行时,此面板将显示所选记录的详细信息。

在此面板中,我有一个下拉列表,用于执行回发以设置标签的文本。当回发发生时,面板再次变为不可见。我尝试为更新面板设置触发器并将其设置为下拉列表中的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";
}

1 个答案:

答案 0 :(得分:1)

您可以在通话的页面加载中解决您的问题:

if(Page.IsPostback)
     pnContent.Visible = true;

您可能必须执行IsAjaxPostBack我认为是通过脚本管理器。

以下是我对更新小组的原因。


简而言之,在使用更新面板时,此问题非常很难修复。您应该使用自己的Ajax。

问题本身很常见。 超文本传输​​协议是无状态的,但 Asp.Net Web-Forms 会创建一个完整的生命周期,立即迫使某种形式的状态持久性进入您的应用程序。

帮助减轻这些压力的工具之一是众所周知的邪恶的更新面板。这个面板没什么特别之处,它只是将整个页面复制到内存中,然后通过Ajax执行 Postback 来命中服务器,而不会发生闪烁你通常做回发

更新面板问题

  • 表现沉重。
  • 难以调试或确保正常工作。
  • 很难衡量页面状态。

第三点是最常见的一个单一原因,它使你的代码成为一个圆圈。我想说的是,您的网页加载了什么。 更新面板触发,页面刷新。该页面通过客户端进行修改,更新面板触发器,页面刷新,无需客户端修改。

  

服务器不知道您的客户端更改,它不会持续存在   在记忆中。因此,当更新面板触发时,它会调用该页面   从服务器发送数据的最后一刻开始。

真正解决这个问题的唯一方法。您必须实施QueryStrings和其他细微差别,以帮助确保服务器端客户端保持同步。这将创造意大利面条非常快,所以希望你喜欢意大利面。

避免这些情况的最佳方法是利用 Web服务并发送您自己的 Ajax 以确保页面始终反映目标,因此当您的用户执行回发,您可以控制发送的数据。

希望这个解释详细解释了使用更新面板的缺陷。除非您可以避免使用 JavaScript 并完全依赖服务器,否则很可能以上述方式重做页面的速度要快得多。

我试图真实地传达为什么您应该使用自己的Ajax并自己完成,而无需通过更新面板自动应用数据。您不应该使用该面板,应该自己动手。