簡體   English   中英

動態創建的LinkBut​​ton導致UpdatePanel執行完全回發

[英]Dynamically Created LinkButton causing UpdatePanel to do Full Postback

好的,所以我要在ASP.NET中創建一個自定義日歷(我免費找到的日歷不適合我的需求,或者太笨拙,付費的日歷也不是免費的)。 我正在使用許多UpdatePanels來允許更改月份和顯示日歷。

基本上,流程是這樣的,上部的UpdatePanel包含三個LinkBut​​tons lbPrev,lbCurr和lbNext,以及一個Label lblYear。 lbPrev將日歷切換到上個月,lbNext切換到下個月,並且lbCurr不執行任何操作-我只是還沒有將其更改為標簽(我可能會在單擊時添加一些內容-就像我不確定每月的顯示) 。

單擊其中任何一個時,UpdatePanel都可以正常工作,僅更新面板本身,而不更新整個回發。

第二個UpdatePanels,我們將其稱為udpCalMain,它包含日歷的心臟(所有日期),這是通過具有動態呈現LinkBut​​ton的asp:Placeholder控件完成的(其文本是幾個div和一個圖像) )。

這個想法是,當您單擊日歷上動態創建的日期單元格之一時,系統會使用當天數據庫中的相關詳細信息更新第三個UpdatePanel“ udpDisplay”。

現在,發生的事情是,每當您單擊任何日期時,頁面都將被強制執行完整的回發-我知道這是因為動態創建的LinkBut​​ton呈現為簡單標記,並且會自動強制回發。

我試圖做的是創建一個AsyncPostBackTrigger並將其附加到每個動態創建的LinkBut​​ton上。 但是,我找不到(在PlaceHolder控件內部)控件及其ID的列表,以便可以附加此觸發器。

這樣做或避免完全回發的其他方式的任何幫助將不勝感激。

這是我用來附加AsyncPostBackTrigger的代碼:

    AsyncPostBackTrigger apbtDate = new AsyncPostBackTrigger();
    apbtDate.ControlID = "ctl00$cpMain$CalendarBase$ctll01"; //Just an example
    apbtDate.EventName = "Click";
    udp1.Triggers.Add(apbtDate);

這是UpdatePanels的顯示代碼:

    <asp:UpdatePanel ID="udp1" runat="server" EnableViewState="True" ChildrenAsTriggers="False" UpdateMode="Conditional">
        <ContentTemplate>
            <div style="width: 700px; float: left">
                <div style="width: 700px; text-align: center">
                    <asp:Label ID="lblYear" runat="server" />
                </div>
                <div style="float: left; width: 200px; text-align: center">
                    <asp:LinkButton ID="lbPrev" runat="server" OnClick="lbPrev_Click" />
                </div>
                <div style="float: left; width: 300px; text-align: center">
                    <asp:LinkButton ID="lbCurr" runat="server" />
                </div>
                <div style="float: left; width: 200px; text-align: center">
                    <asp:LinkButton ID="lbNext" runat="server" OnClick="lbNext_Click" />
                </div>
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:UpdatePanel ID="udpCalMain" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
        <ContentTemplate>
            <div style="width: 700px; height: 700px">
                <asp:PlaceHolder ID="phCalendar" runat="server" />
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
</div>
<asp:UpdatePanel ID="udpDisplay" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
    <ContentTemplate>
        <div style="width: 300px; float: left; height: 35px">

        </div>
        <div style="width: 300px; float: left">
            <asp:Label ID="lblTest" runat="server" />
        </div>
    </ContentTemplate>
</asp:UpdatePanel>

基本上,我需要一種在占位符內創建可點擊元素的方法,該元素不會引起完整的回發。 任何幫助將不勝感激。

好吧,所以我偶然發現了答案。 我只是在后面的代碼中向LinkBut​​ton添加了一個ID,到目前為止我還沒有考慮這一點。 但是,顯然,未命名(沒有ID)的LinkBut​​ton只是觸發了導致整個回發的默認行為。 然后命名LinkBut​​ton會導致PlaceHolder中的結果控件正常運行,並且不會引起完整的回發。

暫無
暫無

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

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