2011-03-29 61 views
1

我很難找出應該很簡單但我無法解決的問題。如何在不同的選項卡上激活頁面內的不同選項卡並對其執行回發

我有一個頁面(Default.aspx)其中包含WebTab控件(Infragistics,但應該不是真的)。裏面的WebTab的每個選項卡控件是另一個頁面,Page1.aspx的,Page2.apx,所以它是這樣的:

Default.aspx 
WebTab 
    WebTabControl(0) 
     Page1.aspx <-- I'm in this codebehind after 
        calling __doPostBack from JavaScript 
        as I have a parameter from a WebDataGrid. 
    WebTabControl(1) 
     Page2.aspx <-- I want to open this page and pass it a parameter. 

我在Page1.aspx的代碼隱藏在做一個回傳,因爲我有我需要的參數傳遞到下一頁,我想打開第二個選項卡中的Page2.apx。

基本上,我想我需要做以下步驟。 1.將「活動」選項卡設置爲WebTabControl(1) 2.給它一個參數,我可以用它來做些事情。

我知道一旦有人告訴我該怎麼做,我必須自己開槍:-) 謝謝!

+0

我還沒有想通了這一點,所以我從不同的角度看它。我可以在Default.aspx頁面中創建一個將訂閱Page1.aspx上的自定義事件的Listener? ..或者這只是一個糟糕的設計?我知道如果我用控件代替Page1和Page2,那麼我可以做我需要的。我只想知道是否可以使用我目前的設置,這樣我就不必重新編碼了。 – 2011-03-31 17:30:18

回答

0

非常感謝您的答覆,但是這不是我所期待的。

我真正解決這個問題的方法是在Default.aspx頁面創建一個JavaScript函數,我可以從Page1.aspx中調用該函數。

這是Default.aspx頁面中的函數,它激活了我需要的Tab,並使用WebDataGrid從Page1.aspx中需要的值填充搜索框。

<script type="text/javascript"> 
    function activateTab(rowId, tabId) { 
     var tab = $find("WebTab1"); 
     var ctl; 
     if (tabId == 3) { 
      ctl = window.frames.document.frames[tabId].window.document.getElementById("WebDialogWindow2_tmpl_txtAddressNumber"); 
     } 
     else if (tabId == 2) 
      ctl = window.frames.document.frames[tabId].window.document.getElementById("WebDialogWindow2_tmpl_txtAccount"); 

     if (ctl != null) {    
      ctl.value = rowId; 
      tab.set_selectedIndex(tabId, true, null); 
      window.frames.document.frames[tabId].window.DoSearch(rowId); 
     } 
    } 
</script> 

我然後能夠從Page1.aspx的用下面的函數,這是從所述的WebDataGrid DoubleClick事件稱爲調用activateTab()函數(我需要抓住從行選擇一個值。)

 function doubleClickRow() { 
     var grid = $find("WebDataGrid1"); 
     //Get the ADDRESS_NUMBER value. 
     var rowId = grid.get_behaviors().get_selection().get_selectedRows().getItem(0).get_cell(2).get_value(); 
     window.parent.activateTab(rowId, 3); 
    } 

下一個步驟是,如圖在第一代碼例如從activateTab上的Default.aspx()函數調用上Page2.aspx該JavaScript功能。

 //Force a Postback 
    function DoSearch(id) { 
     HideSearch(); 
     __doPostBack("WebDataGrid1", id); 
    } 

這實際上做了後期,我需要這樣,這就是我所要做的。如果我想將這2個__doPostBack()值傳遞給Page2.aspx Page_Load事件,我將不得不執行以下操作。但在我的情況下,郵政回來是我所需要的,因爲我已經填入了搜索框。

  //Don't need these right now, but just in case we might I'll leave them in. 
     string eventTarget = Page.Request.Params.Get("__EVENTTARGET"); 
     string eventArgument = Page.Request.Params.Get("__EVENTARGUMENT"); 
     Search(); 

對於那些誰不明白與__event *代碼的最後一部分,如果你使用一個ScriptManager,否則你必須編寫自己的參數,我不會進入這裏這是可能的。

就是這樣。我當然在這裏學習了一些JavaScript,所以我希望它對其他人有用。

感謝 戴夫

0

好的AFAICU,WebTab控件有WebTab,每個webtab都有頁面。試試這個:

  1. 添加控件的自動回發功能。爲了調用下一個選項卡,它會自動加載aspx頁面。
  2. 如果你不需要回發,那麼做一件事,在tab控件的click事件或tab change事件中添加查詢字符串中的某個參數。像page.aspx?tab = 1。現在的網頁加載事件,使用邏輯下面

     1. Check if Request[tab] is not null. 
         2. use int.tryparse and get the tab number. 
         3. Now on the basis of the load the tab and the page. 
         And make the tab active. 
    
相關問題