#asp.net #listview #asp.net-ajax #updatepanel #datapager
#asp.net #Просмотр списка #asp.net-ajax #Панель обновления #datapager
Вопрос:
Привет, я надеюсь, что кому-то будет легко ответить. Во-первых, я пытался ListView
привязать к a DataPager
и вставить ASP.NET UpdatePanel
чтобы создать пейджер на базе AJAX для записей из моей базы данных. Я схватил UpdatePanel
и разместил:
SqlDataSource
ListView
—ItemTemplate
наличие одногоImageButton
и нескольких других ASP.NET элементы управления в нем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 я это сделал. Большое спасибо, СЭР 🙂