Почему панель обновления делает полный пост обратно для пользовательского контроля?
-
03-07-2019 - |
Вопрос
У меня довольно сложный пользовательский элемент управления - в нем есть несколько панелей обновления.
Я пытаюсь использовать такой элемент управления внутри панели обновлений:
<asp:UpdatePanel ID="up1" runat="server">
<ContentTemplate>
<asp:Button ID="btn1" runat="server" Text="Sample Button" /> <asp:Label ID="lblTime" runat="server"></asp:Label>
<cc1:MyCustomControl ID="MyCustomControl1" runat="server" >
</cc1:MyCustomControl>
</ContentTemplate>
</asp:UpdatePanel>
Когда я нажимаю кнопку на панели обновлений, она выполняет асинхронную запись назад, и на экране не появляется «мерцание». Когда я нажимаю кнопку в моем пользовательском элементе управления, страница мерцает и делает полный пост обратно. Р>
Внутри пользовательского элемента управления есть панели обновлений, которые пытаются выполнить полную обратную передачу (на основе триггеров). Р>
Как сделать так, чтобы UpdatePanel на уровне страницы не выполнял полную обратную передачу независимо от того, что происходит внутри пользовательского элемента управления?
Решение 2
Выяснил решение, аналогичное этой проблеме: Как я могу получить UpdatePanel для перехвата DropDownList CompositeControl
Кроме моего контроля, вызывающего обратную передачу, находился в панели обновления с триггером полной обратной передачи. Мне удалось вытащить этот элемент управления, чтобы он не был вложен в панели обновления, и это разрешило его.
Другие советы
Задумывались ли вы о том, чтобы явно настроить asp: AsyncPostBackTrigger с помощью элемента управления btn1 в элементе управления up1 UpdatePanel.
<asp:UpdatePanel ID="up1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btn1" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:Button ID="btn1" runat="server" Text="Sample Button" />
<asp:Label ID="lblTime" runat="server"></asp:Label>
<cc1:MyCustomControl ID="MyCustomControl1" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
Изменить. Как вы пытались явно вызвать метод Update в событии OnClick кнопки для панели обновления? Это включает в себя панели обновления, встроенные в пользовательский элемент управления.
Сначала я бы посмотрел, есть ли какая-то другая проблема с пользовательским элементом управления, вызывающая полную обратную передачу страницы, поскольку в любом случае должно происходить обновление всей панели обновления (все еще с ajax).
После этого просто посмотрите на раздел «Вложенные элементы управления UpdatePanel»: http://msdn.microsoft.com/en-us/library/bb398867 .aspx #
Также убедитесь, что для элемента управления ScriptManager установлено значение true для свойства EnablePartialRendering.
В UpdatePanel установите свойство ChildrenAsTriggers = " true "
. Это говорит UpdatePanel перехватывать все вызовы PostBack, которые исходят из UpdatePanel.
Вы можете также изучить свойство UpdateMode , которое определяет, какие события вызывают обновление. (По умолчанию UpdatePanel обновляется, если обновляется любая другая панель на экране. Это заставило меня ненадолго, пока я не понял, что происходит.)