0
업데이트 패널에 타이머가 있습니다. 패널에 일부 레코드가있는 중계기가 있습니다. 또한 PagedDataSource를 사용하여 리피터의 데이터를 매김합니다. 리피터의 페이지 크기를 다시로드하는 onchange 이벤트에 서버 메소드를 추가했습니다. 이 이벤트는 필요한 경우 시작되지만 타이머 틱이 실행될 때만 데이터가 다시로드됩니다. 따라서 페이지 크기가 바뀌면 가끔씩 전체 타이머 간격을 기다렸다가 페이지 크기가 바뀌어야합니다. 왜 이런 일이 일어날 지 설명 할 수 있을까요? 어떤 도움이 여기 C# 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();
}