2010-09-22 2 views
0

Моей страницы СодержанияНужна помощь с UpdatePanel

<asp:updatePanel id="Panel1" runat="server" Visible="true"> 
     <ContentTemplate> 
       <div> 
        blah blah 
       </div> 
      </ContentTemplate> 
    </asp:updatePanel> 

    <asp:updatePanel id="Panel2" runat="server" Visible="false"> 
     <ContentTemplate> 
       <div> 
        yada yada 
       </div> 
      </ContentTemplate> 
    </asp:updatePanel>  

код файл ..следующего код в конце кнопки Отправить щелчок событие: -

  Panel1.Visible = false; 
      Panel2.Visible = true; 

Теперь раньше я был используя asp: Panel .. тогда он работал нормально ... например, панель 1 спряталась бы, и панель 2 появлялась бы вместо этого .. это было ПОСЛЕ того, как я изменил asp: Panel to asp: updatePanel, что все стало испорчено ... теперь Submit кнопка просто не будет работать!

Что случилось не так внезапно ?? Я изменил его на updatePanel, чтобы страница не обновлялась .. это не так, как мы реализуем эту вещь ???

 <asp:updatePanel id="Panel1" runat="server"> 
      <ContentTemplate> 
      <div> 
    <p> 
     Type ur name 

       <asp:TextBox ID="name" runat="server"> 
       </asp:TextBox> 
     </p> 


     <asp:Button ID="btn" OnClick="btn_Click" runat="server" 
     Text="Submit" /> 
    </div> 

    </ContentTemplate> 
      </asp:updatePanel> 


    <asp:updatePanel id="Panel2" runat="server" Visible="false"> 
    <ContentTemplate> 
    <div> 
     Thank You! 

    </div> 
    </ContentTemplate> 
    </asp:updatePanel> 
+0

«это не так, как мы реализуем эту вещь» - если вы это понимаете, да. Я предполагаю, что ваша кнопка не находится внутри UpdatePanel. – RPM1984

+0

Вы не можете программно «спрятать» UpdatePanel, как это. потому что UpdatePanel является «контейнером», который запускает обратную передачу, а затем вы пытаетесь «спрятаться», когда он возвращается обратно? Не имеет смысла, если вы думаете об этом. Переосмыслите свое решение - что вы пытаетесь сделать? – RPM1984

+0

Я только что проверил .. внутри внутри updatePanel только – Serenity

ответ

1

Если вы установили Visible="false" на UpdatePanel, он не будет передан клиенту вообще. Поэтому, если вы выполняете обратную передачу Ajax, клиент не сможет сделать невидимую UpdatePanel видимой, потому что ее просто нет.

Думайте о UpdatePanels так же, как и о маркерах, показывая, какие фрагменты вашей страницы вы хотите обновить после обратной передачи Ajax. Для вашего сценария я считаю, что самым простым решением было бы использовать как UpdatePanels and Panels. Кроме того, поскольку эти две вещи вы обновление (две панели) находятся в непосредственной близости друг к другу, нет никакой необходимости в двух отдельных UpdatePanels:

<asp:updatePanel id="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
    <asp:Panel id="Panel1" Visible="true" runat="server"> 
     blah blah 
    </asp:Panel> 
    <asp:Panel id="Panel2" Visible="false" runat="server"> 
     yada yada 
    </asp:Panel> 
    </ContentTemplate> 
</asp:updatePanel> 

Затем в коде-позади, изменить Visible собственности на Panel элементы управления.

+0

wait lemme попробуйте это прямо сейчас. Я тоже это использую, используя обе панели – Serenity

-1

Я не знаю, где ваша кнопка Submit есть, но, возможно, попробуйте обновить эти панели с:

Panel1.Update(); 
Panel2.Update(); 
+0

Это не сработает - потому что свойства 'UpdateMode' и' ChildrenAsTriggers' не имеют они будут установлены по умолчанию, и поэтому оба обновления будут обновляться после каждой обратной передачи Ajax. Причина, по которой невидимая UpdatePanel не обновляется, заключается в том, что она не на клиенте в первую очередь. –

2

В http://msdn.microsoft.com/en-us/magazine/cc163413.aspx#S3, вы можете прочитать

Множественные UpdatePanels

На странице может размещаться несколько UpdatePanels. По умолчанию, когда обновляется одна UpdatePanel на странице, обновляются и другие UpdatePanels на странице. Иногда это то, что вы хотите, но чаще всего вам не нужно обновлять UpdatePanel в ответ на другие обновления. Вы можете быть выборочным, о том, какие экземпляры UpdatePanel обновляются (и когда), устанавливая свойство UpdateMode каждого элемента управления UpdatePanel на странице «Условное». Затем, когда один UpdatePanel обновляет и вызывает обработчик событий на стороне сервера, вызовите UpdatePanel.Update на других панелях, которые вы хотите обновить. Это уменьшает нагрузку на сервер, уменьшая количество элементов управления, которые визуализируют, и уменьшает объем данных в ответе, потому что UpdatePanels, которые не обновляются, ничего не добавляют к ответу.