好的,所以我創建了一個自定義日曆(我發現免費的那個不適合我的需求,或者太笨重,付費的日曆並不是免費的)在ASP.NET中。我正在使用多個UpdatePanel來允許更改月份和顯示日曆。動態創建LinkButton導致UpdatePanel做完全回傳
基本上流程就是這樣,上面的UpdatePanel包含三個LinkButtons lbPrev,lbCurr和lbNext以及一個Label lblYear。 lbPrev將日曆切換到前一個月,lbNext到下一個月,lbCurr什麼都不做 - 我只是沒有將它更改爲標籤(我可以在點擊時添加一些東西 - 就像我不確定的每月展示一樣) 。
當單擊其中的任何一個時,UpdatePanel的工作原理與它應該完全相同,只更新面板本身而不是完整的回發。
UpdatePanels的第二個,我們稱之爲udpCalMain,包含日曆的核心(所有日期),這是通過一個asp:佔位符控件來實現的,該控件具有LinkButton動態呈現(其文本是幾個divs和圖像)。
這個想法是,當您單擊日曆上的動態創建的日期單元格之一時,系統將從當天的數據庫更新第三個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);
,這裏是對的UpdatePanel顯示代碼:
<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>
基本上,我需要一種方法來創建可點擊佔位符內的元素不會導致完整的回傳。任何幫助將不勝感激。
這聽起來對我來說,你想要的只是一個Ajax調用來獲取當天的「相關細節」。這將是最快/最簡單的,除非你有充分的理由不這樣做。 – monty 2015-03-19 02:43:57