2009-04-07 2 views
12

Я использую .NET 3.5 и строю страницы внутри рамки Community Server 2008.Как остановить UpdatePanel из-за обратного возврата всей страницы?

На одной из страниц я пытаюсь запустить UpdatePanel.

Я взял образец прямо с сайта ASP.NET, обновить время в UpdatePanel до текущего времени, нажав кнопку, но по какой-то причине, когда я пытаюсь выполнить эту функцию, вся страница обновляется.

Вот что у меня есть:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Label1.Text = "Panel refreshed at " + DateTime.Now.ToString(); 
    Label2.Text = "Panel refreshed at " + DateTime.Now.ToString(); 
} 
<asp:ScriptManager ID="ScriptManager1" runat="server"/> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <fieldset> 
      <legend>UpdatePanel</legend> 
      <asp:Label ID="Label1" runat="server" Text="Panel created."></asp:Label><br /> 
      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> 
     </fieldset> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Всякий раз, когда я нажимаю кнопку, убедитесь, что обновления панели - но и целые сообщения страницы назад! Я вижу, как вся страница мигает. Какого черта я делаю неправильно?

Я нахожусь внутри вложенной главной страницы, но я не уверен, что это проблема. Может ли быть что-то в этой структуре Community Server, которую я использую, что приводит к возврату всех событий?

ответ

16

Вы пытались установить Button1 как AsyncPostBackTrigger в разделе триггеров? Установить ChildrenAsTriggers собственности на true и UpdateMode собственности до Conditional.

protected void Button1_Click(object sender, EventArgs e) 
{  
    Label1.Text = "Panel refreshed at " + DateTime.Now.ToString();  
    UpdatePanel1.Update(); 
}  
<asp:ScriptManager ID="ScriptManager1" runat="server"/> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional"> 
    <Triggers>   
     <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />  
    </Triggers>  
    <ContentTemplate>   
     <fieldset>    
      <legend>UpdatePanel</legend>    
      <asp:Label ID="Label1" runat="server" Text="Panel created."></asp:Label><br />    
      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />   
     </fieldset>  
    </ContentTemplate> 
</asp:UpdatePanel> 
+0

Большое спасибо! – user53885

+0

триггерный раздел с asyncpostbacktrigger сделал мой день, большое спасибо! – BitQuestions

+0

Может кто-нибудь объяснить, почему этот явный асинхронный триггер требуется? Являются ли элементы управления внутри UpdatePanel, предположительно, причиной частичного обновления страницы по умолчанию? – drizin

6

Я не вижу Label2 в вашем примере кода выше. Если Label2 находится за пределами UpdatePanel, произойдет полное обновление страницы, потому что это то, что требуется, чтобы страница правильно обновляла Label2.

По умолчанию UpdatePanels будет динамически обновлять содержимое внутри них, когда они запускаются элементами управления внутри них. Если вам нужно сделать некоторые улучшенные обновления, скажите, что кнопка за пределами панели вызывает обновление или ярлык на другой панели, то вам нужно установить атрибут Conditional на UpdatePanel (ы) и сделать некоторые ручные вызовы обновления в вашем коде.

+0

спасибо! – user53885

2

Установить ChildrenAsTriggers="true" на ваш элемент управления UpdatePanel.

2

«По умолчанию UpdatePanels будет только динамически обновлять содержание в них, при срабатывании контроля в них.»

В противном случае вся страница будет обновлена! В этом-то и дело!

2

Другая возможная причина заключается в том, что если на странице есть ClientIDMode="static", тогда элементы управления, которые вы ожидаете обновить только UpdatePanel, обновят всю страницу.

Чтобы устранить проблему, вам просто нужно установить ClientIDMode="AutoID" на элементы управления, которые должны запускать сообщение UpdatePanel.

Смежные вопросы