Почему панель обновления делает полный пост обратно для пользовательского контроля?

StackOverflow https://stackoverflow.com/questions/616884

Вопрос

У меня довольно сложный пользовательский элемент управления - в нем есть несколько панелей обновления.

Я пытаюсь использовать такой элемент управления внутри панели обновлений:

    <asp:UpdatePanel ID="up1" runat="server">
    <ContentTemplate>
     <asp:Button ID="btn1" runat="server" Text="Sample Button" />&nbsp;&nbsp;<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 обновляется, если обновляется любая другая панель на экране. Это заставило меня ненадолго, пока я не понял, что происходит.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top