FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 14904|回复: 9
打印 上一主题 下一主题

[引导贴]如何在子页面中向父页面添加Tab,如何关闭当前Tab

[复制链接]
跳转到指定楼层
楼主
发表于 2013-10-15 16:55:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个问题经常有人问啊问,说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.         }
复制代码





沙发
发表于 2014-9-13 00:41:48 | 只看该作者
执行后台的关闭方法会爆js错误,请问如何解决?
板凳
 楼主| 发表于 2014-9-18 09:40:10 | 只看该作者
xtb_sp 发表于 2014-9-13 00:41
执行后台的关闭方法会爆js错误,请问如何解决?

见附件演示。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
地板
发表于 2014-9-18 20:10:00 | 只看该作者
你这个是通过前台js关闭的,这个大家都知道。demo里面就有,比如这个场景:button提交表单将数据保存到数据里面,保存成功以后,然后在关闭当前这个tab。这个就会有问题了。IE11会报错。
5#
发表于 2014-9-23 23:14:21 | 只看该作者
衷心感谢!  -----    黑冰.cn
大师出手,必须顶!
6#
 楼主| 发表于 2014-10-10 16:17:28 | 只看该作者
xtb_sp 发表于 2014-9-18 20:10
你这个是通过前台js关闭的,这个大家都知道。demo里面就有,比如这个场景:button提交表单将数据保存到数据 ...

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

下载开源版全部源代码,查找如下 JavaScript 函数(可以看到FineUI重写了这个函数):
  1. hookPostBack: function () {
  2.             if (typeof (__doPostBack) != 'undefined') {
  3.                 __doPostBack = f__doPostBack;
  4.             }
  5.         }
复制代码
9#
发表于 2016-8-29 17:34:18 | 只看该作者
我在首页加个下拉框,在下拉框里面改变值的时候,实现右键鼠标的关闭所有标签的那种功能,这个怎么实现??
10#
发表于 2016-9-19 10:18:35 | 只看该作者
xtb_sp 发表于 2014-9-18 20:10
你这个是通过前台js关闭的,这个大家都知道。demo里面就有,比如这个场景:button提交表单将数据保存到数据 ...

不会报错吧,执行完保存,调用前端的js函数就可以了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-5-4 05:57 , Processed in 0.060147 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表