Запоминание активной вкладки при обновлении страницы ASPX - PullRequest
0 голосов
/ 04 июня 2010

У меня настроена страница ASPX, которая загружает и отображает динамические данные из локальной базы данных SQLite. Поскольку данные записываются в базу данных из отдельного приложения C #, я настроил страницу ASPX на обновление каждые 30 секунд, когда база данных помечает себя как активно получающую новые данные.

На моей странице ASPX у меня есть 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 ]

1 голос
/ 04 июня 2010

Если вы все время выполняете полную обратную передачу, сохраните ее в сеансе ASP.NET. например

Session["ActiveTab"] = index;

Затем, чтобы получить его:

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

В противном случае использование jQuery ajax для обновления данных, по моему опыту, гораздо лучший способ, чем использование UpdatePanels. Но похоже, что вы уже привержены MS Ajax, поэтому следуйте рекомендациям Майка использовать таймер ajax вместо заголовка обновления.

1 голос
/ 04 июня 2010

Попробуйте поместить UpdatePanels в TabPanels. Если вы опубликуете пример кода вашего ASPX, вам будет легче помочь.

...