如何在不同的选项卡上激活页面内的不同选项卡并对其执行回发

如何在不同的选项卡上激活页面内的不同选项卡并对其执行回发

问题描述:

我很难找出应该很简单但我无法解决的问题。如何在不同的选项卡上激活页面内的不同选项卡并对其执行回发

我有一个页面(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

非常感谢您的答复,但是这不是我所期待的。

我真正解决这个问题的方法是在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,所以我希望它对其他人有用。

感谢 戴夫

好的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.