簡體   English   中英

回發內部更新面板問題

[英]Postback inside update panel issue

我在更新面板中有一個最初隱藏的面板。 選擇網格內的行時,此面板將顯示所選記錄的詳細信息。

在這個面板中,我有一個下拉列表,它執行回發以設置標簽的文本。 當回發發生時,面板再次變為不可見。 我嘗試為更新面板設置觸發器並將其設置為dropdown的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";
}

您可以在電話的Page Load上解決您的問題:

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

您可能必須執行IsAjaxPostBack我認為它是通過腳本管理器。

以下是我反對Update Panel的原因。


簡而言之,在使用更新面板的同時 ,修復此問題將非常復雜。 您應該使用自己的Ajax。

問題本身很常見。 超文本傳輸​​協議是無狀態的,但Asp.Net Web-Forms創建了一個完整的生命周期,可立即強制某種形式的狀態持久性到您的應用程序。

有助於緩解這些壓力的工具之一是眾所周知的邪惡的更新小組 這個面板不是什么特別的,它只是將你的整個頁面復制到內存,然后通過Ajax執行回發來命中服務器而沒有你正常做發時會發生的閃爍

更新面板問題

  • 表現沉重。
  • 難以調試或確保正常工作。
  • 難以衡量頁面狀態。

第三點是最常見的一個單一原因,它使你的代碼成為一個圓圈。 我想說的是,你的頁面加載了。 更新面板觸發,頁面刷新。 頁面通過客戶端, 更新面板觸發器,頁面刷新進行修改,無需客戶端修改。

服務器不知道您的客戶端更改,它不會在內存中保留。 因此,當更新面板觸發時,它會從服務器發送數據的最后一刻開始重新調用該頁面。

真正解決這個問題的唯一方法。 您必須實現QueryStrings和其他細微差別,以幫助確保服務器端客戶端保持同步。 這將創造意大利面條非常快,所以希望你喜歡意大利面。

避免這些情況的最佳方法是利用Web服務並發送您自己的Ajax以確保頁面始終反映目標,因此當您的用戶執行回發時 ,您可以控制發送的數據。

希望這個解釋能夠詳細解釋使用更新面板的缺陷。 除非你可以避免使用JavaScript並且完全依賴服務器,否則很可能以上述方式重做頁面的速度要快得多。

我試圖真實地傳達為什么你應該使用自己的Ajax並自己完成,而不必通過更新面板自動應用數據。 不應該使用面板,應該自己做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM