Как остановить 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>
Всякий раз, когда я нажимаю на кнопку, панель обновляется, но вся страница возвращается! Я вижу, как мигает вся страница. Какого черта я делаю не так?
Я нахожусь во вложенной главной странице, но я не уверен, что это проблема. Может ли быть что-то в этой среде Сервера совместной работы, которую я использую, которая вызывает все события для обратной передачи?
6 ответов
Вы пытались установить 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>
Я не вижу Label2 в вашем примере кода выше. Если Label2 находится за пределами UpdatePanel, произойдет полное обновление страницы, потому что это то, что требуется для правильного обновления Label2.
По умолчанию UpdatePanels будет только динамически обновлять содержимое в них, когда они запускаются элементами управления внутри них. Если вам нужно сделать несколько необычных обновлений, скажем, кнопку за пределами панели, вызывающую обновление или метку на другой панели, то вам нужно установить атрибут Conditional на вашей панели обновления (Update) и сделать несколько ручных вызовов на обновление в вашем коде.
Другая возможная причина в том, что если страница имеет ClientIDMode="static"
, затем элементы управления, которые вы ожидаете обновить только UpdatePanel, обновят всю страницу.
Чтобы решить проблему, вам просто нужно установить ClientIDMode="AutoID"
на элементе (ах), который должен вызвать обратную запись UpdatePanel.
Если у вас есть старый проект, который был обновлен с.net Framework v1.1, удалите эту строку из веб-конфигурации, чтобы она заработала:
<xhtmlConformance mode="Legacy"/>
Задавать ChildrenAsTriggers="true"
на вашем элементе управления UpdatePanel.
"По умолчанию UpdatePanels будет только динамически обновлять содержимое в них, когда они запускаются элементами управления внутри них".
В противном случае вся страница будет обновлена! В этом-то и дело!