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


У нас есть структура, которая имеет 3 основных панели обновления, каждая из которых имеет несколько вложенных панелей обновления (но только один уровень вложенности.) Все панели имеют значение conditional, а ChildrenAsTriggers-false, так что это выглядит примерно так:

<asp:UpdatePanel ChildrenAsTriggers="false" OnLoad="Update_OnLoad" 
    ID="updateCol2" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
        <asp:UpdatePanel ChildrenAsTriggers="false" UpdateMode="Conditional" 
            ID="updateFeed" runat="server">
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="btnSubmit" EventName="Click" />
            </Triggers>
            <ContentTemplate>
                <asp:Button OnClick="function" ID="btnSubmit" runat="server" />
            <ContentTemplate>
         </asp:UpdatePanel>
    </ContentTemplate>
</asp:UpdatePanel>

Я ожидал бы, что функция OnLoad родительской панели обновления никогда не будет работать, кроме как при фактической загрузке страницы, и что функция OnClick кнопки будет выполняться при каждом щелчке, обновляя дочернюю панель обновления. Однако, родительская панель обновления обновляется при каждом нажатии кнопки, а дочерняя панель обновления запускается только после этого (в результате обновления родительской панели обновления).)

2 3

2 ответа:

Действительно ли родительская панель обновления обновляется, то есть содержимое изменяется?

Я ожидал бы, что OnLoad функция родительской панели обновления никогда бы не побежал, кроме как на самом деле загрузка страницы

Это ложное, но, к сожалению, распространенное предположение. Помните, что даже если это асинхронная обратная передача, весь жизненный цикл страницы и элемента управления выполняется для каждого элемента управления, включая Load и Init. Это так же, как вы просили страницу обычно.

Разница в том, что будет обновляться только область UpdatePanel страницы, а не весь пользовательский интерфейс.

Для получения дополнительной информации о том, как работают панели обновления есть отличная статья о ASP.Net сайт документации Ajax .

Используя точно вставленный код pschorf (одна updatepanel содержится в другой updatepanel), можно не запускать родительскую updatepanel, когда запускается дочерняя?

Запускает только дочернюю панель updatepanel, чтобы не обновлять всю область родительской панели updatepanel и только дочернюю область updatepanel.

Пример проекта Кодекса:

<UPanel1 ChildrenAsTriggers="false" UpdateMode="Conditional">    
 <UPanel2 ChildrenAsTriggers="false" UpdateMode="Conditional">    
   <asp:Button onclick="..." />    
 </UPanel2>    
 Other UPanel1's content not being refreshed after the UPanel2's button click
</UPanel1>

Спасибо! (Возможно, пост womp ответил на мой ответ, и я неправильно понял)