记住刷新ASPX页面时的活动选项卡

时间:2010-06-04 04:22:35

标签: asp.net ajaxcontroltoolkit refresh tabcontainer

我有一个ASPX页面设置,可以从本地SQLite数据库加载和显示动态数据。由于数据是从一个单独的C#应用​​程序写入数据库的,所以当数据库标记为主动接收新数据时,我将我的ASPX页面设置为每30秒刷新一次。

在我的ASPX页面上,我有一个带有几个不同TabPanel的TabContainer,每个TabPanel代表不同的数据视图。现在,当我的页面被刷新时,活动选项卡面板将被重置为我的ASPX页面中的一个设置为ActiveTabIndex。

我想知道是否有一种简单的方法来坚持记住哪个标签。

谢谢!

已编辑添加代码示例

MyPage.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPageFile.master" AutoEventWireup="true" CodeFile="MyPage.aspx.cs" Inherits="MyPage" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="content" Runat="Server">
    <asp:ToolkitScriptManager ID="ToolkitScriptManager" runat="server" />
    <asp:TabContainer ID="tabContainer" runat="server" ActiveTabIndex="1" CssClass="myTabStyle" Visible="true">
        <asp:TabPanel ID="tab1" runat="server" HeaderText="Tab 1">
            <ContentTemplate>
                <p>Hello</p>
            </ContentTemplate>
        </asp:TabPanel>
        <asp:TabPanel ID="tab2" runat="server" HeaderText="Tab 2">
            <ContentTemplate>
                <asp:PlaceHolder ID="tab2placeholder" runat="server" />
            </ContentTemplate>
        </asp:TabPanel>
        <asp:TabPanel ID="tab3" runat="server" HeaderText="Tab 3">
            <ContentTemplate>
                <asp:TabContainer ID="tab3content" runat="server" ActiveTabIndex="0" CssClass="myTabeStyle" />
            </ContentTemplate>
        </asp:TabPanel>
        <asp:TabPanel ID="tab4" runat="server" HeaderText="Tab 4">
            <ContentTemplate>
                <p>Blah.</p>
            </ContentTemplate>
        </asp:TabPanel>
    </asp:TabContainer>
</asp:Content>

MyPage.aspx.cs

public partial class MyPage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ...
        if (isInProgress)
        {
            Response.AddHeader("Refresh", "30");
        }

        LoadTab1();
        LoadTab2();
        LoadTab3();
        LoadTab4();
        ...
    }
}

2 个答案:

答案 0 :(得分:1)

尝试将UpdatePanels放在TabPanels中。如果您发布ASPX的代码示例,将更容易提供帮助。

答案 1 :(得分:1)

如果您一直在进行完整的回发,请将其保存在ASP.NET会话中。例如

Session["ActiveTab"] = index;

然后检索它:

int? activeTab = Session["ActiveTab"] as int?;

否则使用jQuery ajax刷新数据,在我的经验中比使用UpdatePanels更好的方法。但看起来你已经致力于MS Ajax了,所以请Mike的建议使用ajax定时器而不是刷新头。