Работа с Asp.Net ListView и панелью обновления Asp.Net Ajax - PullRequest
1 голос
/ 26 октября 2011

Привет, надеюсь, кому-то будет легко ответить.Прежде всего, я пытался привязать ListView к 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 требует ID элемента управления и не принимает 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="&laquo" ShowNextPageButton="False"  ShowPreviousPageButton="false" />
                <asp:NumericPagerField />
                <asp:NextPreviousPagerField ShowLastPageButton="True" LastPageText="&raquo" ShowPreviousPageButton="False"  ShowNextPageButton="false" />
            </Fields>
        </asp:DataPager>
        </p>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="DataPagerForAlbums" />
    </Triggers>
</asp:UpdatePanel> 

Ответы [ 2 ]

2 голосов
/ 26 октября 2011

Вы можете использовать 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);            
    }
}
0 голосов
/ 26 октября 2011

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

...