ASP.NET панель обновления в элементе управления ListView не обновляется


В основном у меня такая ситуация

Страница > Панель Обновления > пользовательский элемент управления > Представление Списка > Пользовательский контроль (внутри шаблона элемента) > Панель Обновления

Когда я нажимаю на кнопку в самой внутренней панели обновления, я хочу, чтобы содержимое панели обновления обновилось. Этого не может быть. Тем не менее обработчик щелчка выполняется нормально асинхронно. Панель обновления просто не хочет обновляться.

Код - у меня создал простое тестовое веб-приложение, которое воспроизводит проблему, и поделился им на моем Google диске: UpdatePanelInListViewTest.zip , но вот разметка:

Страница:

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="ajaxParent" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <uc1:ListUserControl ID="ListUserControl1" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

Список Элементов Управления Пользователя:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ListUserControl.ascx.cs" Inherits="UpdatePanelInListViewTest.ListUserControl" %>
<%@ Register src="MiniWidget.ascx" tagname="MiniWidget" tagprefix="uc1" %>
<asp:ListView ID="lstTest" runat="server">
    <ItemTemplate>
        Item
        <uc1:MiniWidget ID="MiniWidget1" runat="server" />
    </ItemTemplate>
</asp:ListView>

Мини-Виджет Пользовательского Управления

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MiniWidget.ascx.cs" Inherits="UpdatePanelInListViewTest.MiniWidget" %>
<asp:UpdatePanel ID="ajaxWidget" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:LinkButton ID="lnkTest" runat="server" onclick="lnkTest_Click">Test</asp:LinkButton>
        <asp:Label ID="lblTest" runat="server" Text=""></asp:Label>
    </ContentTemplate>
</asp:UpdatePanel>

Я пробовал разные перестановки этого; например, наличие кнопки вне панели и добавление триггера и т. д., Но я просто не могу заставить его обновиться.

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

2 2

2 ответа:

Проблема заключается в том, когда вы вызываете методdatabind вListUserControl .

Перемещение lstTest.DataBind(); так, чтобы он выполнялся внутри Page_Load, а не Page_PreRender, устраняет проблему для вашегопростого тестового веб-приложения .

Пробовали ли вы:

    <asp:UpdatePanel ID="ajaxPanel" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
 <Triggers>
      <asp:AsyncPostBackTrigger ControlID="btnTest" />
 </Triggers>
        <ContentTemplate>
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
            <asp:Button ID="btnTest" runat="server" Text="Test" onclick="btnTest_Click" />
        </ContentTemplate>
    </asp:UpdatePanel>