![](/img/trans.png)
[英]LinkButton in ListView in UpdatePanel causes full postback
[英]Dynamically Created LinkButton causing UpdatePanel to do Full Postback
好的,所以我要在ASP.NET中創建一個自定義日歷(我免費找到的日歷不適合我的需求,或者太笨拙,付費的日歷也不是免費的)。 我正在使用許多UpdatePanels來允許更改月份和顯示日歷。
基本上,流程是這樣的,上部的UpdatePanel包含三個LinkButtons lbPrev,lbCurr和lbNext,以及一個Label lblYear。 lbPrev將日歷切換到上個月,lbNext切換到下個月,並且lbCurr不執行任何操作-我只是還沒有將其更改為標簽(我可能會在單擊時添加一些內容-就像我不確定每月的顯示) 。
單擊其中任何一個時,UpdatePanel都可以正常工作,僅更新面板本身,而不更新整個回發。
第二個UpdatePanels,我們將其稱為udpCalMain,它包含日歷的心臟(所有日期),這是通過具有動態呈現LinkButton的asp:Placeholder控件完成的(其文本是幾個div和一個圖像) )。
這個想法是,當您單擊日歷上動態創建的日期單元格之一時,系統會使用當天數據庫中的相關詳細信息更新第三個UpdatePanel“ udpDisplay”。
現在,發生的事情是,每當您單擊任何日期時,頁面都將被強制執行完整的回發-我知道這是因為動態創建的LinkButton呈現為簡單標記,並且會自動強制回發。
我試圖做的是創建一個AsyncPostBackTrigger並將其附加到每個動態創建的LinkButton上。 但是,我找不到(在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>
基本上,我需要一種在占位符內創建可點擊元素的方法,該元素不會引起完整的回發。 任何幫助將不勝感激。
好吧,所以我偶然發現了答案。 我只是在后面的代碼中向LinkButton添加了一個ID,到目前為止我還沒有考慮這一點。 但是,顯然,未命名(沒有ID)的LinkButton只是觸發了導致整個回發的默認行為。 然后命名LinkButton會導致PlaceHolder中的結果控件正常運行,並且不會引起完整的回發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.