2015-03-19 102 views
0

好的,所以我創建了一個自定義日曆(我發現免費的那個不適合我的需求,或者太笨重,付費的日曆並不是免費的)在ASP.NET中。我正在使用多個UpdatePanel來允許更改月份和顯示日曆。動態創建LinkBut​​ton導致UpdatePanel做完全回傳

基本上流程就是這樣,上面的UpdatePanel包含三個LinkBut​​tons lbPrev,lbCurr和lbNext以及一個Label lblYear。 lbPrev將日曆切換到前一個月,lbNext到下一個月,lbCurr什麼都不做 - 我只是沒有將它更改爲標籤(我可以在點擊時添加一些東西 - 就像我不確定的每月展示一樣) 。

當單擊其中的任何一個時,UpdatePanel的工作原理與它應該完全相同,只更新面板本身而不是完整的回發。

UpdatePanels的第二個,我們稱之爲udpCalMain,包含日曆的核心(所有日期),這是通過一個asp:佔位符控件來實現的,該控件具有LinkBut​​ton動態呈現(其文本是幾個divs和圖像)。

這個想法是,當您單擊日曆上的動態創建的日期單元格之一時,系統將從當天的數據庫更新第三個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); 

,這裏是對的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> 

基本上,我需要一種方法來創建可點擊佔位符內的元素不會導致完整的回傳。任何幫助將不勝感激。

+0

這聽起來對我來說,你想要的只是一個Ajax調用來獲取當天的「相關細節」。這將是最快/最簡單的,除非你有充分的理由不這樣做。 – monty 2015-03-19 02:43:57

回答

0

好吧,所以我偶然發現了答案。我只是在代碼隱藏中向LinkBut​​ton添加了一個ID,我沒有考慮到這一點。但是,顯然這個未命名的(沒有ID的)LinkBut​​tons只是觸發了導致完整回發的默認行爲。命名LinkBut​​ton然後導致PlaceHolder中的結果控件正常工作,並且不會導致完整的回發。

相關問題