c#onchange事件仅在计时器运行时重新加载数据。为什么?

时间:2014-03-24 14:41:30

标签: c# asp.net webforms android-viewpager onchange

我有一个带定时器的更新面板。面板包含有一些记录的转发器。我还使用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>
            &nbsp;<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();
}

1 个答案:

答案 0 :(得分:0)

我通过为下拉列表设置autopostback="true"来解决此问题。