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

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

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

    <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 на уровне страницы не выполнял полную обратную передачу независимо от того, что происходит внутри пользовательского элемента управления?

Ответы [ 4 ]

2 голосов
/ 06 марта 2009

Задумывались ли вы о том, чтобы явно установить 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 кнопки для панели обновления? Это включает в себя панели обновления, встроенные в пользовательский элемент управления.

1 голос
/ 06 марта 2009

Разобрался с решением проблемы, аналогичной этой: Как мне получить UpdatePanel для перехвата DropDownList CompositeControl

За исключением моего контроля, вызывающего обратную передачу в панели обновления с триггером полной обратной передачи. Мне удалось вытащить этот элемент управления, чтобы он не был вложен в панели обновления, и это разрешило его.

0 голосов
/ 06 марта 2009

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

После этого просто посмотрите на раздел «Элементы вложенного элемента управления UpdatePanel»: http://msdn.microsoft.com/en-us/library/bb398867.aspx#

Также убедитесь, что элемент управления ScriptManager со свойством EnablePartialRendering имеет значение true.

0 голосов
/ 06 марта 2009

В UpdatePanel установите свойство ChildrenAsTriggers="true". Это говорит UpdatePanel о перехвате всех вызовов PostBack, которые исходят из UpdatePanel.

Возможно, вы также захотите изучить свойство UpdateMode , которое определяет, какие события вызывают обновление. (По умолчанию UpdatePanel обновляется, если обновляется любая другая панель на экране. Это заставило меня ненадолго, пока я не понял, что происходит.)

...