2015-03-19 4 views
0

Итак, я создаю собственный календарь (тот, который я нашел бесплатно, не соответствует моим потребностям или слишком неуклюжим, а платные - не бесплатны) в ASP.NET. Я использую несколько UpdatePanels, чтобы изменить месяцы и отображение календарей.Динамически созданный LinkButton, вызывающий UpdatePanel, чтобы сделать полную обратную передачу

В основном поток подобен этому, верхняя UpdatePanel содержит три LinkButtons lbPrev, lbCurr и lbNext и один ярлык lblYear. lbPrev переключает календарь на предыдущий месяц, lbNext на следующий месяц и lbCurr ничего не делает - я просто не изменил его на метку (я могу добавить что-то при нажатии на него - как ежемесячный дисплей, который я не уверен) ,

При нажатии любой из них UpdatePanel работает точно так, как предполагается, обновляя только панель, а не полную обратную передачу.

Вторая из UpdatePanels, назовем ее udpCalMain, содержит сердцевину календаря (все даты), это делается с помощью asp: управления заполнитель, который имеет динамическое отображение LinkButton (с их текстом, являющимся парой divs и изображение).

Идея состоит в том, что при нажатии одной из динамически создаваемых ячеек даты в календаре система обновляет третью UpdatePanel «udpDisplay» с соответствующими данными из базы данных за этот день.

Теперь, когда вы нажимаете какую-либо дату, страница вынуждена делать полную обратную передачу - я знаю, что это связано с тем, что динамически созданный LinkButton отображается как простой тег, и это автоматически заставляет обратную передачу.

Что я пытался сделать, это создать AsyncPostBackTrigger и прикрепить его для каждого динамического создания LinkButton. Однако я не могу найти (внутри элемента управления PlaceHolder) список элементов управления и их идентификаторов, чтобы я мог присоединить этот триггер.

Любая помощь в этом или другом способе избежать полной обратной передачи будет с благодарностью.

Вот код, который я использовал для крепления 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> 

В принципе, мне нужен способ создания кликабельным элементы внутри Placeholder, которые не вызовут полного Postback. Любая помощь будет принята с благодарностью.

+0

Мне кажется, что вы хотите просто призвать ajax, чтобы забрать «подходящие детали» для этого дня. Это было бы самым быстрым/простым, если у вас нет веских оснований. – monty

ответ

0

Хорошо, поэтому я наткнулся на ответ. Я просто добавил идентификатор к LinkButton в codebehind, я не думал об этом до этого момента. Но, по-видимому, неназванный (без идентификатора) LinkButtons просто вызвал поведение по умолчанию, которое вызвало полную обратную передачу. Именование LinkButton привело к тому, что результирующий элемент управления в PlaceHolder функционировал правильно и не вызвал полную обратную передачу.