如何在不同选项卡上的页面内激活不同的选项卡,并在其上执行PostBack

时间:2011-03-29 22:43:38

标签: asp.net webforms

我无法找出一些应该简单的东西,但我无法弄清楚。

我有一个包含WebTab控件的页面(Default.aspx)(Infragistics,但实际上并不重要)。在WebTab的每个Tab Control内部是另一个页面,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 codebehind做回发,因为我有一个参数需要传递到下一页,我想打开第二个标签内的Page2.apx。

基本上,我认为我需要执行以下步骤。 1.将“活动”选项卡设置为WebTabControl(1) 2.给它一个参数,让我为它做一些事情。

我知道一旦有人告诉我怎么做,我就得开枪自杀:-) 谢谢!

2 个答案:

答案 0 :(得分:0)

Ok AFAICU,WebTab控件具有WebTab,每个webtab都有页面。试试这个:

  1. 添加控件的自动回发功能。为了调用下一个选项卡,它将自动加载aspx页面。
  2. 如果你不需要Postback那么做一件事,在tab事件的tab事件或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.
    

答案 1 :(得分:0)

非常感谢您的回复,但这不是我想要的。

我实际上解决此问题的方法是在Default.aspx页面中创建一个JavaScript函数,我可以从Page1.aspx调用它。

这是Default.aspx页面中的函数,该页面激活了我需要的选项卡,并使用Page1.aspx中WebDataGrid所需的值填充了搜索框。

    <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中的activateTab()函数,该函数是从WebDataGrid的DoubleClick事件中调用的(我需要从所选行中获取值。)

        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);
    }

下一步是在Page.aspx上从Default.aspx上的activateTab()函数调用此JavaScript函数,如第一个代码示例所示。

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

这实际上做了我需要的帖子,这就是我所要做的一切。如果我想将这些2 __doPostBack()值传递给Page2.aspx Page_Load事件,我将不得不执行以下操作。但是在我的情况下,Post back就是我所需要的,因为我已经填充了搜索框。

            //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,所以我希望它对那里的其他人有用。

由于 戴夫