Работа с Asp.Net Просмотр списка и Asp.Net Панель обновления Ajax

#asp.net #listview #asp.net-ajax #updatepanel #datapager

#asp.net #Просмотр списка #asp.net-ajax #Панель обновления #datapager

Вопрос:

Привет, я надеюсь, что кому-то будет легко ответить. Во-первых, я пытался ListView привязать к a DataPager и вставить ASP.NET UpdatePanel чтобы создать пейджер на базе AJAX для записей из моей базы данных. Я схватил UpdatePanel и разместил:

  1. SqlDataSource
  2. ListView ItemTemplate наличие одного ImageButton и нескольких других ASP.NET элементы управления в нем
  3. DataPager

в ContentTemplate . Назначение DataPager идентификатора AsyncPostbackTrigger в полях UpdatePanel триггера сработало отлично.

Я также хотел выполнить полный пост-бэк в ImageButton Click событии. Однако, поскольку ImageButton он находится внутри ListView , UpdataPanel он вызывает частичную обратную отправку. Я попытался добавить ImageButton как UpdatePanel PostBackTrigger , но UpdatePanel для этого требуется идентификатор элемента управления, и он не будет принимать ImageButton , поскольку он находится внутри ListView .

Как мне передать ему идентификатор элемента управления для элемента внутри ItemTemplate ListView и успешно вызвать полную обратную отправку?

Вот мой код:

 <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate> 
        <asp:SqlDataSource ... ></asp:SqlDataSource>
        <asp:ListView ID="ListViewForAlbums" runat="server" >
            <ItemTemplate>
                <div class="album">
                    <asp:ImageButton ID="albumPhoto" class="albumPhotosStyle" runat="server" ImageUrl="<%# Bind('albumPhotoPath') %>" AlternateText="<%# Bind('album_id') %>" ToolTip="<%# Bind('albumDetails') %>" onclick="albumPhotos_Click"  />
                    <div class="albumInfoHolder">

                    ...

                    </div>
                </div> <!-- End Album -->
            </ItemTemplate>
            <EmptyDataTemplate>
                <p>No Albums Yet. Check Back Soon!</p>
            </EmptyDataTemplate>
        </asp:ListView>

        <asp:DataPager ID="DataPagerForAlbums" runat="server" PagedControlID="ListViewForAlbums" PageSize="3" >
            <Fields>
                <asp:NextPreviousPagerField ShowFirstPageButton="True" FirstPageText="amp;laquo" ShowNextPageButton="False"  ShowPreviousPageButton="false" />
                <asp:NumericPagerField />
                <asp:NextPreviousPagerField ShowLastPageButton="True" LastPageText="amp;raquo" ShowPreviousPageButton="False"  ShowNextPageButton="false" />
            </Fields>
        </asp:DataPager>
        </p>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="DataPagerForAlbums" />
    </Triggers>
</asp:UpdatePanel> 
 

Ответ №1:

Вы можете использовать ScriptManager для регистрации элемента управления в качестве элемента управления обратной отправкой. Сделайте что-то подобное в ItemDataBound случае:

 protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    ImageButton button = e.Item.FindControl("ImageButton1") as ImageButton;
    if (button != null)
    {
        ScriptManager.GetCurrent(Page).RegisterPostBackControl(button);            
    }
}
 

Ответ №2:

Используйте событие ItemDataBound ListView, чтобы получить ImageButton и зарегистрировать его как элемент управления обратной отправкой с помощью метода ScriptManager RegisterPostBackControl.

Комментарии:

1. nvm я это сделал. Большое спасибо, СЭР 🙂