Asp.net 嵌套ListView DataPager停止使用updatepanel
以下是我的设想: 我有几笔交易,每笔交易都有一个类别,所有交易都按类别分组: DealView:命名交易对象的类别、交易列表 DealViews列表绑定到category列表视图,item databound上的listview生成相应的内部listview并设置其相应的数据页分页大小,它还决定是否显示内部页分页。categories listview的OnLoad事件用于任何内部寻呼机的回发。我可以调试代码,我可以看到加载事件被执行,内部页面设置页面属性也被正确设置,但是无论我点击多少次,UI上没有任何变化。如果我删除updatepanel,一切正常。以下是一些或许多代码:Asp.net 嵌套ListView DataPager停止使用updatepanel,asp.net,listview,sharepoint,updatepanel,datapager,Asp.net,Listview,Sharepoint,Updatepanel,Datapager,以下是我的设想: 我有几笔交易,每笔交易都有一个类别,所有交易都按类别分组: DealView:命名交易对象的类别、交易列表 DealViews列表绑定到category列表视图,item databound上的listview生成相应的内部listview并设置其相应的数据页分页大小,它还决定是否显示内部页分页。categories listview的OnLoad事件用于任何内部寻呼机的回发。我可以调试代码,我可以看到加载事件被执行,内部页面设置页面属性也被正确设置,但是无论我点击多少次,UI
<div class="tabs-content">
<asp:UpdatePanel ID="upDeals" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:ListView ID="lvCategorisedDeals" runat="server" DataKeyNames="Deals" >
<LayoutTemplate>
<asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
<div class="clear"></div>
</LayoutTemplate>
<ItemTemplate>
<div class="tab-item">
<asp:ListView runat="server" ID="lvCategoryDeals">
<LayoutTemplate>
<div class="deals">
<asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
</div>
<div class="clear"></div>
</LayoutTemplate>
<ItemTemplate>
<div class="rc-item">
<h3><a href="<%# Eval("Url") %>"><%# Eval("Title") %></a></h3>
<div class="deal-img">
<a href="<%# Eval("Url") %>"><img src="<%# Eval("ImageUrl") %>" width="168" height="113"></a>
</div>
<div class="deal-data">
<div class="info"><%# Eval("Caption") %></div>
<div class="price"><%# Eval("Currency") %> <%# Eval("DiscountedPrice") %></div>
<div class="deal-booking"><a href="#">Buy Now</a></div>
</div>
</div>
</ItemTemplate>
</asp:ListView>
<div class="dealsPager">
<asp:DataPager runat="server" ID="pgInner" PagedControlID="lvCategoryDeals" >
<Fields>
<asp:NumericPagerField />
</Fields>
</asp:DataPager>
</div>
</div>
</ItemTemplate>
</asp:ListView>
</ContentTemplate>
</asp:UpdatePanel>
</div>
在代码背后:
void lvCategorisedDeals_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
foreach (var item in lvCategorisedDeals.Items)
{
if (item.ItemType == ListViewItemType.DataItem)
{
var lvInner = item.FindControl("lvCategoryDeals") as ListView;
if (lvInner == null)
throw new InvalidOperationException("The inner ListView was not found");
var pgInner = item.FindControl("pgInner") as DataPager;
if (pgInner == null)
throw new InvalidOperationException("The inner pager was not found");
if (lvCategorisedDeals.DataKeys == null && lvCategorisedDeals.DataKeys.Count == 0)
throw new InvalidOperationException("The outer ListViews Datakeys do not seem to be set");
var dataItem = lvCategorisedDeals.DataKeys[item.DisplayIndex].Value as List<GRCDeal>;
lvInner.PagePropertiesChanging += new EventHandler<PagePropertiesChangingEventArgs>(
(s, evt) =>
{
pgInner.SetPageProperties(evt.StartRowIndex, evt.MaximumRows, false);
// Get the data for the ListView lvInner
lvInner.DataSource = dataItem;
lvInner.DataBind();
}
);
}
}
}
}
void lvCategorisedDeals_ItemDataBound(object sender, ListViewItemEventArgs e)
{
var listViewDataItem = e.Item as ListViewDataItem;
if (listViewDataItem == null)
return;
if (listViewDataItem.ItemType == ListViewItemType.DataItem)
{
var lvInner = e.Item.FindControl("lvCategoryDeals") as ListView;
if (lvInner == null)
throw new InvalidOperationException("The inner ListView was not found");
var pgInner = e.Item.FindControl("pgInner") as DataPager;
if (pgInner == null)
throw new InvalidOperationException("The inner pager was not found");
var dataItem = listViewDataItem.DataItem as DealView;
pgInner.PageSize = this.PageSize;
pgInner.Visible = dataItem.Deals.Count > this.PageSize;
lvInner.DataSource = dataItem.Deals;
lvInner.DataBind();
}
另外需要注意的是,我正在将该交易列表作为数据键传递,并且我能够很好地抓住它。第一个绑定发生在页面加载时。代码位于Visual Web部件SharePoint 2013的用户控件部分中。
谢谢你的帮助,因为这让我很难受