我有一个带定时器的更新面板。面板包含有一些记录的转发器。我还使用PagedDataSource来分页转发器的数据。我为onchange事件添加了服务器方法,重新加载了转发器的页面大小。需要时会触发此事件,但仅在执行计时器滴答时才会重新加载数据。因此,当我更改页面大小时,有时我需要等待整个计时器间隔才能看到页面大小发生变化。有人能解释为什么会这样吗?任何帮助将不胜感激
这是我的一些代码
<form id="linksForm" runat="server">
<div>
<div style="float: left; background-color: white">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:Button ID="DisplayAllLinksBT" OnClick="DisplayAllLinks" runat="server" Text="Visi"/>
<asp:Button ID="DisplayNewLinksBT" OnClick="DisplayNewLinks" runat="server" Text="Nauji" />
<asp:Timer ID="TimerLinks" runat="server" Interval="10000" OnTick="OnLinksRepeaterTick">
</asp:Timer>
<asp:UpdatePanel ID="LinksPanel" UpdateMode="Always" runat="server">
<ContentTemplate>
<div id="loadingImageArea"></div>
<table style="border: none;">
<% if (!HasPermission)
{ %>
<tr>
<th>
<td style="color: green;">Upvotes</td>
<td style="color: red;">Downvotes</td>
</th>
</tr>
<% } %>
<asp:Repeater ID="LinksRepeater" runat="server">
<ItemTemplate>
<tr>
...
<asp:Label ID="PageSizeLabel" runat="server" Text="Rodyti"></asp:Label>
<asp:DropDownList ID="PageSizeSelection" Width="60" runat="server" OnSelectedIndexChanged="PageSizeSelection_SelectedIndexChanged">
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
</div>
服务器端:
protected void PageSizeSelection_SelectedIndexChanged(object sender, EventArgs e)
{
var pageSize = Int32.Parse(PageSizeSelection.SelectedValue);
SessionHelper.PutValue(PageSizeSessionVariable, pageSize);
var lastPageIndex = Math.Ceiling(
((float) ((PagedDataSource) LinksRepeater.DataSource).DataSourceCount)/
(int)pageSize) - 1;
var currentPageIndex = ((PagedDataSource) LinksRepeater.DataSource).CurrentPageIndex;
if (lastPageIndex > 0 && currentPageIndex > lastPageIndex)
{
SessionHelper.PutValue(CurrentPageIndexSessionVariable, (int)lastPageIndex);
}
LoadLinks();
}
答案 0 :(得分:0)
我通过为下拉列表设置autopostback="true"
来解决此问题。