Подтвердить что ты не робот

Как остановить UpdatePanel из-за обратной пересылки всей страницы?

Я использую .NET 3.5 и строю страницы внутри рамки Community Server 2008.

На одной из страниц я пытаюсь запустить 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>

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

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

4b9b3361

Ответ 1

Вы пытались установить 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>

Ответ 2

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

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

Ответ 3

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

Ответ 4

"По умолчанию UpdatePanels будет динамически обновлять содержимое внутри них, когда они запускаются с помощью элементов управления внутри них.

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

Ответ 5

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

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