FineUI 官方论坛

标题: [引导贴]如何在子页面中向父页面添加Tab,如何关闭当前Tab [打印本页]

作者: 黑冰.cn    时间: 2013-10-15 16:55
标题: [引导贴]如何在子页面中向父页面添加Tab,如何关闭当前Tab
这个问题经常有人问啊问,说DEMO有吧,可总是折腾不清,我来发个简化版的。

page1.aspx,主页面,放一个工具栏,点击添加tab,打开grid.aspx页,注意标红的JS部分,必须要有。
  1.     <form id="form1" runat="server">
  2.     <ext:PageManager ID="PageManager1" AutoSizePanelID="RegionPanel1" runat="server"></ext:PageManager>
  3.     <ext:RegionPanel ID="RegionPanel1" ShowBorder="false" runat="server">
  4.         <Regions>
  5.             <ext:Region ID="Region1" Margins="0 0 0 0" ShowBorder="false" Height="30px" ShowHeader="false"
  6.                 Position="Top" Layout="Fit" runat="server">
  7.                 <Toolbars>
  8.                     <ext:Toolbar runat="server">
  9.                         <Items>
  10.                             <ext:Button runat="server" Text="打开GRID页" OnClick="OpenGrid"></ext:Button>
  11.                         </Items>
  12.                     </ext:Toolbar>
  13.                 </Toolbars>
  14.             </ext:Region>

  15.             <ext:Region ID="mainRegion" ShowHeader="false" Layout="Fit" Margins="0 0 0 0" Position="Center"
  16.                 runat="server">
  17.                 <Items>
  18.                     <ext:TabStrip ID="mainTabStrip" EnableTabCloseMenu="true" ShowBorder="false" runat="server">
  19.                         <Tabs>
  20.                             <ext:Tab Title="首页" Layout="Fit" Icon="House" runat="server">

  21.                                 <Items>
  22.                                     <ext:ContentPanel ShowBorder="false" BodyPadding="10px" ShowHeader="false" AutoScroll="true"
  23.                                         CssClass="intro" runat="server">
  24.                                         首页
  25.                                     </ext:ContentPanel>
  26.                                 </Items>
  27.                             </ext:Tab>
  28.                         </Tabs>
  29.                     </ext:TabStrip>
  30.                 </Items>
  31.             </ext:Region>
  32.         </Regions>
  33.     </ext:RegionPanel>
  34.     </form>
  35.     <script type="text/javascript">
  36. <font color="#ff0000">        function onReady() {
  37.             var mainTabStrip = Ext.getCmp("<%=mainTabStrip.ClientID %>");
  38.             // 公开添加示例标签页的方法
  39.             window.addExampleTab = function (id, url, text, icon, refreshWhenExist) {
  40.                 // 动态添加一个标签页
  41.                 // mainTabStrip: 选项卡实例
  42.                 // id: 选项卡ID
  43.                 // url: 选项卡IFrame地址
  44.                 // text: 选项卡标题
  45.                 // icon: 选项卡图标
  46.                 // addTabCallback: 创建选项卡前的回调函数(接受tabConfig参数)
  47.                 // refreshWhenExist: 添加选项卡时,如果选项卡已经存在,是否刷新内部IFrame
  48.                 X.util.addMainTab(mainTabStrip, id, url, text, icon, null, refreshWhenExist);
  49.             };

  50.             window.removeActiveTab = function () {
  51.                 var activeTab = mainTabStrip.getActiveTab();
  52.                 mainTabStrip.removeTab(activeTab.id);
  53.             };

  54.         }</font>


  55.     </script>
复制代码
page1.aspx.cs,按钮事件,增加tab
  1.         protected void OpenGrid(object sender, EventArgs e)
  2.         {
  3.             FineUI.PageContext.RegisterStartupScript(mainTabStrip.GetAddTabReference("tabGrid3", "WebForm3.aspx", "TabGrid", true));
  4.         }
复制代码


grid.aspx页,显示一个grid列表。。请各种自备数据

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head runat="server">
  4.     <title></title>
  5. </head>
  6. <body>
  7.     <form id="form1" runat="server">
  8.     <ext:PageManager runat="server" AutoSizePanelID="Grid1"/>
  9.     <ext:Grid runat="server" ID="Grid1"<font color="#ff0000"><b> OnRowCommand="GridRowCommand"</b></font>>
  10.         <Columns>
  11.                 <ext:BoundField DataField="ID" HeaderText="ID"/>
  12.                 <ext:BoundField DataField="DeptName" HeaderText="部门名称"/>
  13.                 <ext:BoundField DataField="CustomerName" HeaderText="企业名称"/>
  14.                 <ext:BoundField DataField="Mobile" HeaderText="手机"/>
  15.                 <ext:BoundField DataField="Position" HeaderText="职位"/>
  16.                 <ext:BoundField DataField="Status" HeaderText="状态"/>

  17. <font color="#ff0000"><b>                <ext:LinkButtonField TextAlign="Center" Width="30px" Icon="TabAdd" ToolTip="打开Tab1"
  18.                 ColumnID="deleteField1" CommandName="OpenTab1" />
  19.                 <ext:LinkButtonField TextAlign="Center" Width="30px" Icon="TabAdd" ToolTip="打开Tab2"
  20.                 ColumnID="deleteField2" CommandName="OpenTab2" /></b></font>

  21.         </Columns>
  22.     </ext:Grid>
  23.     </form>
  24. </body>
  25. </html>
复制代码

grid.aspx.cs,在RowCommand事件中处理,判断要创建一个神马Tab
  1.         protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             if(!IsPostBack)
  4.             {
  5.                 BindGrid();
  6.             }
  7.         }

  8.         private void BindGrid()
  9.         {
  10.             Grid1.DataSource = (new Employee()).GetList();
  11.             Grid1.DataBind();
  12.         }

  13.         protected void GridRowCommand(object sender, FineUI.GridCommandEventArgs e)
  14.         {
  15.             switch (e.CommandName)
  16.             {
  17.                 case "OpenTab1":
  18. <font color="#ff0000"><b>                    FineUI.PageContext.RegisterStartupScript(
  19.                         "parent.addExampleTab("gridTab1", "tabContent1.aspx", "LinkButton1")");</b></font>
  20.                     break;
  21.                 case "OpenTab2":
  22. <font color="#ff0000"><b>                    FineUI.PageContext.RegisterStartupScript(
  23.                         "parent.addExampleTab("gridTab2", "</b></font><b style="color: rgb(255, 0, 0);">tabContent2</b><font color="#ff0000"><b>.aspx", "LinkButton2")");</b></font>
  24.                     break;
  25.             }
  26.         }
复制代码
tabContent1.aspx,演示关闭当前tab
  1.     <form id="form1" runat="server">
  2.     <ext:PageManager runat="server" />
  3.                             <ext:Button ID="Button2" runat="server" Icon="Delete" OnClick="CloseCurrentTab" Text="关闭我"></ext:Button>

  4.     </form>
复制代码

tabContent1.aspx.cs,执行page1.aspx中的JS
  1.         protected void CloseCurrentTab(object sender, EventArgs e)
  2.         {
  3. <font color="#ff0000">            PageContext.RegisterStartupScript("parent.removeActiveTab()");</font>
  4.         }
复制代码






作者: xtb_sp    时间: 2014-9-13 00:41
执行后台的关闭方法会爆js错误,请问如何解决?
作者: 黑冰.cn    时间: 2014-9-18 09:40
xtb_sp 发表于 2014-9-13 00:41
执行后台的关闭方法会爆js错误,请问如何解决?

[attach]6493[/attach]见附件演示。
作者: xtb_sp    时间: 2014-9-18 20:10
你这个是通过前台js关闭的,这个大家都知道。demo里面就有,比如这个场景:button提交表单将数据保存到数据里面,保存成功以后,然后在关闭当前这个tab。这个就会有问题了。IE11会报错。
作者: erp8@live.cn    时间: 2014-9-23 23:14
衷心感谢!  -----    黑冰.cn
大师出手,必须顶!
作者: 黑冰.cn    时间: 2014-10-10 16:17
xtb_sp 发表于 2014-9-18 20:10
你这个是通过前台js关闭的,这个大家都知道。demo里面就有,比如这个场景:button提交表单将数据保存到数据 ...

了解一下FineUI的运行原理和用到的HTML元素就知道,当你打开了多层窗体后,要用top.方法名来执行最外层页面的方法。
作者: 世界没有真情    时间: 2015-2-4 20:14
求指教,开原版,专业版,调用__dopostback 页面为什么没有闪。。。能给个思路我想想吗,想了好久了

作者: sanshi    时间: 2015-2-5 21:55
世界没有真情 发表于 2015-2-4 20:14
求指教,开原版,专业版,调用__dopostback 页面为什么没有闪。。。能给个思路我想想吗,想了好久了
...

下载开源版全部源代码,查找如下 JavaScript 函数(可以看到FineUI重写了这个函数):
  1. hookPostBack: function () {
  2.             if (typeof (__doPostBack) != 'undefined') {
  3.                 __doPostBack = f__doPostBack;
  4.             }
  5.         }
复制代码

作者: xiaowengang    时间: 2016-8-29 17:34
我在首页加个下拉框,在下拉框里面改变值的时候,实现右键鼠标的关闭所有标签的那种功能,这个怎么实现??
作者: 飞↑草    时间: 2016-9-19 10:18
xtb_sp 发表于 2014-9-18 20:10
你这个是通过前台js关闭的,这个大家都知道。demo里面就有,比如这个场景:button提交表单将数据保存到数据 ...

不会报错吧,执行完保存,调用前端的js函数就可以了




欢迎光临 FineUI 官方论坛 (https://fineui.com/bbs/) Powered by Discuz! X3.4