2010-06-04 58 views
0

我有一個ASPX頁面設置,用於加載和顯示來自本地SQLite數據庫的動態數據。由於數據是從一個單獨的C#應用​​程序寫入數據庫的,因此我設置了ASPX頁面,當數據庫將自己標記爲主動接收新數據時,每30秒刷新一次。記住ASPX刷新的活動標籤頁

在我的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(); 
     ... 
    } 
} 

回答

1

嘗試把UpdatePanel的在TabPanels內。如果您發佈了ASPX的代碼示例,它會更容易幫助。

+0

我添加了一些代碼。我不確定更新面板如何幫助解決這個問題? TabContainer是否已經使用更新面板來實現選項卡功能?或者你是否建議我應該在每個定期檢查新數據的選項卡面板中放置一個UpdatePanel?我會如何去做這件事? – sohum 2010-06-04 04:55:32

+0

我不確定它是如何實現選項卡功能的,但我不認爲它使用更新面板,因爲選項卡更改不一定需要前往服務器,它可能只是用一些javascript函數實現的。 這就是說,我認爲你的頁面正在進行全面刷新而不是部分回發。嘗試使用ajax計時器而不是刷新標題。 您可能需要將您的TabContainer包裝在UpdatePanel中以強制數據呈現。 – 2010-06-04 05:17:02

+0

太棒了,這完美的作品。我在每個TabPanel的ContentTemplate中創建了一個計時器和一個UpdatePanel。現在唯一剩下的問題是,在回發時,選項卡焦點切換到頂部(而不是用戶滾動的位置)。這可以很容易地修復?這不是一個大問題。 – sohum 2010-06-04 15:48:00

1

如果您正在進行完整回發,請將其保存在ASP.NET會話中。例如

Session["ActiveTab"] = index; 

然後檢索它:

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

否則使用jQuery AJAX刷新數據,是在我的經驗,一個更好的方法去比使用UpdatePanel的。但它看起來像你已經致力於MS Ajax,所以去邁克的建議使用ajax計時器,而不是刷新標題。