Как остановить UpdatePanel от обратной передачи всей страницы? - PullRequest
14 голосов
/ 08 апреля 2009

Я использую .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>

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

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

Ответы [ 6 ]

20 голосов
/ 08 апреля 2009

Вы пытались установить 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>
6 голосов
/ 08 апреля 2009

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

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

3 голосов
/ 13 октября 2015

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

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

2 голосов
/ 21 июля 2011

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

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

2 голосов
/ 08 апреля 2009

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

0 голосов
/ 29 октября 2018

Если у вас есть старый проект, который был обновлен с .net Framework v1.1, удалите эту строку из веб-конфигурации, чтобы она заработала:

<xhtmlConformance mode="Legacy"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...