2010-09-01 83 views
1

我有一個使用母版頁的網站。在母版頁上,我有一個sidebar div,其中包含一個提供網站導航的Ajax手風琴控件。當用戶點擊手風琴的鏈接時,我傳遞查詢字符串上的窗格索引。每個webform都從一個基類繼承而來。在基類的Page_Load事件中,我檢查活動窗格索引的查詢字符串,然後設置Accordion.SelectedIndex屬性。這可防止每次用戶導航到不同頁面時手風琴控件重置爲窗格0。javascript to asp.net communication

從Accordion控件直接導航時,上述工作正常。我的問題是,用戶也可以從網絡表單導航 - 他們可以單擊GridView的「編輯」超鏈接,將它們帶到包含所選記錄的DetailsView的頁面。在這種情況下,我需要確定「當前」手風琴窗格的索引,以便我可以在包含詳細信息視圖的網頁表單的頁面加載事件中設置此項。

我能夠捕獲與以下JavaScript被選中手風琴的事件:

function pageLoad() { 
     var accordion = $find('<%= Accordion1.ClientID %>' + '_AccordionExtender'); 
     accordion.add_selectedIndexChanged(onACESelectedIndexChanged); 
    } 
    function onACESelectedIndexChanged(sender, eventArgs) { 
     //alert(sender.get_SelectedIndex()); 
} 

我需要存儲「的SelectedIndex」的地方,以便它可以通過網頁表單的Page_Load事件中被讀取包含詳細信息視圖。

我需要爲此使用Cookie嗎?

謝謝

Rob。

回答

0

我結束了使用cookies,這工作正常。

我確實玩過隱藏的字段,但發現這個問題,因爲我不能始終確定哪些子webforms已加載。

我已經粘貼了我添加到我用於子webforms的基類的page_load事件的代碼片段,以及用於點擊手風琴控件的javascript代碼片段。這可能對與我有同樣問題的人有所幫助。

的JavaScript

function pageLoad() { 
     var accordion = $find('<%= Accordion1.ClientID %>' + '_AccordionExtender'); 
     accordion.add_selectedIndexChanged(onACESelectedIndexChanged); 
    } 
    function onACESelectedIndexChanged(sender, eventArgs) { 

     createCookie('acPane', sender.get_SelectedIndex(), 0) 

    } 
    function createCookie(name, value, days) { 
     if (days) { 
      var date = new Date(); 
      date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 
      var expires = "; expires=" + date.toGMTString(); 
     } 
     else var expires = ""; 
     document.cookie = name + "=" + value + expires + "; path=/"; 
    } 

現在的C#

int acPane = 0; 
     if (Request.Cookies["acPane"] != null) 
     { 
      HttpCookie ckAcPane = Request.Cookies["acPane"]; 
      acPane = Convert.ToInt16(ckAcPane.Value); 
     } 

     if (acPane >= 0) 
     { 
      AjaxControlToolkit.Accordion ac; 
      ac = (AjaxControlToolkit.Accordion)Master.FindControl("Accordion1"); 
      ac.SelectedIndex = acPane; 
     } 
0

Cookie是一種,但您可以使用HiddenField服務器端控件將值存儲在客戶端JavaScript中的隱藏元素中,然後訪問服務器上的隱藏字段。這是最簡單的方法,並且適用於兩種選擇。您必須使用服務器端控件版本,以便您可以訪問服務器上的控件,否則,您必須使用Request.Form集合。

HTH。