FineUI小技巧(4)关闭窗体那些事

时间:2022-09-03 23:14:30

前言

FineUI中的Window控件常用作选择、新增或编辑内容。而关闭Window控件却有很多技巧,了解这些技巧有助于项目的快速开发。

如何关闭Window控件

第一个问题就是如何关闭Window控件,最明显的方式就是右上角的关闭图标了。总的说来,有三种方式:

  1. ESC按键(在Window控件所在页面获取焦点的情况下,按下键盘的ESC将会关闭当前激活窗体)
  2. 窗体右上角的关闭图标
  3. 用户自定义的关闭按钮

前两种方式自不必说,那么如何自定义关闭按钮呢?有两种做法:

  1. 按钮禁用回发,在页面初始化时注册关闭脚本
     <f:Button ID="btnHideInClient" CssClass="inline" Text="隐藏窗体(客户端代码)" EnablePostBack="false"
    runat="server">
    </f:Button>
     protected void Page_Load(object sender, EventArgs e)
    {
    if (!IsPostBack)
    {
    btnHideInClient.OnClientClick = Window2.GetHideReference();
    }
    }
  2. 按钮回发,在回发事件中设置窗体Hidden属性,
     <f:Button ID="btnHideInServer" Text="隐藏窗体(服务端代码)" runat="server" OnClick="btnHideInServer_Click">
    </f:Button>
     protected void btnHideInServer_Click(object sender, EventArgs e)
    {
    Window2.Hidden = true;
    }

    或者注册关闭脚本:

     protected void btnHideInServer_Click(object sender, EventArgs e)
    {
    PageContext.RegisterStartupScript(Window2.GetHideReference());
    }

当然,这里按钮是和Window控件在同样一个页面的。

对于另一种常见情况,也即启用IFrame的Window控件,位于IFrame页面内的按钮如何关闭父页面中的这个Window控件呢?

显然,我们无法在IFrame页面内获取Window控件的实例!

没关系,FineUI提供了ActiveWindow类来处理这个常见问题:

 protected void btnSaveContinue_Click(object sender, EventArgs e)
{
PageContext.RegisterStartupScript(ActiveWindow.GetHideReference());
}

关闭窗体的方式

前面提到的关闭窗体,只是简单的关闭,并未做任何其他处理。其实FineUI提供了三种关闭窗体的方式:

  1. 直接关闭:也就是前面提到的 GetHideReferene 方法返回的脚本
  2. 关闭窗体,然后回发窗体所在的页面,触发Window控件的Close事件:可以使用内置的 GetHidePostBackReference 方法
  3. 关闭窗体,然后刷新窗体所在的页面:可以使用内置的 GetHideRefreshReference 方法

再回到前面介绍的"如何关闭窗体",显然前两种关闭方法(ESC,右上角关闭图标)无法使用 GetHide***Reference 方法,怎么办?

FineUI同时为Window控件提供了 CloseAction 属性,可能的值为 Hide,HidePostBack 和 HideRefresh,分别对应上述方法。

来看一个例子:

  1. 初始显示
    FineUI小技巧(4)关闭窗体那些事
  2. 点击右上角关闭图标,触发了Close事件
    FineUI小技巧(4)关闭窗体那些事

    这个行为是由Window控件的CloseAction属性控制的,来看下控件标签:
     <f:Window ID="Window2" Width="650px" Height="300px" Icon="TagBlue" Title="窗体" Hidden="true"
    EnableMaximize="true" EnableCollapse="true" runat="server" EnableResize="true"
    IsModal="false" CloseAction="HidePostBack" OnClose="Window2_Close" Layout="Fit">
    </f:Window>

    后台的事件处理代码:

     protected void Window2_Close(object sender, WindowCloseEventArgs e)
    {
    Alert.ShowInTop("窗体被关闭了。参数:" + (String.IsNullOrEmpty(e.CloseArgument) ? "无" : e.CloseArgument));
    }

    CloseAction无法定义返回参数,所以这里显示"无"!

  3. 点击页面上的"隐藏窗体,带回发参数",触发了Close 事件,此时的页面显示
    FineUI小技巧(4)关闭窗体那些事

    这个按钮的响应脚本是在页面初始化时注册的,如下所示(注意参数是如何设进去的):
     protected void Page_Load(object sender, EventArgs e)
    {
    if (!IsPostBack)
    {
    btnHideInClient2.OnClientClick = Window2.GetHidePostBackReference("btnHideInClient2");
    }
    }

同样,对于启用IFrame的Window控件,其IFrame内按钮的关闭窗体处理,对应于ActiveWindow的几个方法:

  1. ActiveWindow.GetHideReference
  2. ActiveWindow.GetHidePostBackReference
  3. ActiveWindow.GetHideRefreshReference

关闭窗体的确认对话框

这个特性可能很多人都不知道,不过存在很强的实用性。

简单描述:启用IFrame的Window控件,如果IFrame页面内任意表单字段发生改变,则在关闭窗体时弹出确认框。

目的是防止用户在输入表单内容后,还没来的及保存,一个误操作把弹出窗体关了。

  1. 页面初始显示
    FineUI小技巧(4)关闭窗体那些事
  2. 在"数字输入框"内输入任意值,然后点击右上角的关闭图标,弹出确认对话框
    FineUI小技巧(4)关闭窗体那些事
  3. 清空 "数字输入框"内的值(也即是还原到其初始状态),然后点击右上角的关闭图标,则直接关闭窗体

上述操作是由Window控件的 EnableConfirmOnClose 属性控制(默认为false),下面是这个Window实例的标签定义:

 <f:Window ID="Window1" Hidden="true" EnableIFrame="true" runat="server" EnableConfirmOnClose="true"
EnableMaximize="true" EnableResize="true" Height="450px" Width="800px" Title="窗体一">
</f:Window>

对于上述页面中的"关闭"按钮,行为和右上角的关闭图标一致,不过这种一致性也是认为控制的,来看看"关闭"按钮的脚本:

 protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
btnClose.OnClientClick = ActiveWindow.GetConfirmHideReference();
}
}

本章小结

本篇文章介绍了三种关闭Window控件的方法(ESC、关闭图标、自定义),以及三种FineUI定义的处理方式(隐藏、隐藏后回发、隐藏后刷新)。对于IFrame内的关闭按钮,FineUI提供了ActiveWindow来生成关闭脚本。同时还介绍了一个FineUI内置的属性 EnableConfirmOnClose ,用来控制是否弹出关闭窗体的确认对话框。

源代码与在线示例

本系列所有文章的源代码均可自行下载:http://fineui.codeplex.com/

在线示例:

  1. http://fineui.com/demo/#/demo/window/window.aspx
  2. http://fineui.com/demo/#/demo/iframe/window.aspx

如果本文对你有所启发或者帮助,请猛击“好文要顶”,支持原创,支持三石!

24张专业版高清大图

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

FineUI小技巧(4)关闭窗体那些事

《FineUI小技巧》系列文章目录

FineUI小技巧(4)关闭窗体那些事的更多相关文章

  1. FineUI小技巧(1)简单的购物车页面

    起因 最初是一位 FineUI 网友对购物车功能的需求,需要根据产品单价和数量来计算所有选中商品的总价. 这个逻辑最好在前台使用JavaScript实现,如果把这个逻辑移动到后台C#实现,则会导致过多 ...

  2. FineUI小技巧(5)向子窗口传值,向父窗口传值

    前言 FineUI中经常会用到启用IFrame的Window控件,这样有助于从物理上进行代码解耦和.IFrame的引入就会涉及传值问题,如何在父窗口和子窗口之间相互传值呢? 向子窗口传值 向子窗口传值 ...

  3. FineUI小技巧(3)表格导出与文件下载

    需求描述 实际应用中,我们可能需要导出表格内容,或者在页面回发时根据用户权限下载文件(注意,这里的导出与下载,都是在后台进行的,和普通的一个链接下载文件不同). 点击按钮导出表格 由于FineUI 默 ...

  4. FineUI小技巧(7)多表头表格导出

    前言 之前我们曾写过一篇文章 FineUI小技巧(3)表格导出与文件下载,对于在 FineUI 中导出表格数据进行了详细描述.今天我们要更进一步,介绍下如何导出多表头表格. 多表头表格的标签定义 在 ...

  5. FineUI小技巧(2)将表单内全部字段禁用、只读、设置无效标识

    需求描述 对表单内的所有字段进行操作也是常见需求,这些操作有: 禁用:表单字段变灰,不响应用户动作. 只读:表单字段不变灰,但不接受用户输入(实际上是设置DOM节点的readonly属性),有触发器的 ...

  6. FineUI小技巧(6)自定义页面回发

    前言 FineUI中的绝大部分回发事件都是由控件触发了,比如按钮的点击事件,下拉列表的改变事件,表格的排序分页事件.但有时我们可能会要自己触发页面回发,这时就要知道怎么使用 JavaScript 来做 ...

  7. &lbrack;小技巧&rsqb; Notepad&plus;&plus;关闭拼写检查

    From : http://blog.csdn.net/xuefeng0707/article/details/18272989 把[插件]-[DSpellCheck]-[Spell Check Do ...

  8. cmd窗口关闭 -----window小技巧!

    前沿 平时开发的时候经常用到windows  的命令行工具来启动程序  或是 查看本地数据库的信息 : 经常的手动关闭 ,对于我这种,能用键盘完成的就坚决不用鼠标的人是多么痛苦. 所以在此罗列了一些命 ...

  9. Android Studio 使用小技巧和快捷键

    Android Studio 使用小技巧和快捷键 Alt+回车 导入包,自己主动修正 Ctrl+N   查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L  格式化代码 Ctrl+Alt ...

随机推荐

  1. C风格字符串与C&plus;&plus;风格字符串

    C风格字符串与C++风格字符串 C风格字符串:对字符串进行操作的 C 函数定义在头文件<cstring>中: 1. 字符串定义:char* result: 2. 字符串的最后一个字符是nu ...

  2. CSS3判断手机横屏竖屏

    原理: 当用户旋转屏幕的时候,会进入到你的监听方法中,然后通过window.orientation来获取当前屏幕的状态:0 - 竖屏90 - 逆时针旋转横屏-90 - 顺时针旋转横屏180 - 竖屏, ...

  3. 分享Centos作为WEB服务器的防火墙规则

    # Firewall configuration written by system-config-firewall # Manual customization of this file is no ...

  4. myeclipse10 安装 testng插件

    下载插件: http://pan.baidu.com/s/1c0pghFE 放到dropins目录

  5. Call Azure Queue get &quot&semi;The remote server returned an error&colon; &lpar;400&rpar; Bad Request&period;&quot&semi;

    这几天开始研究Windows Azure, 在使用Azure Queue 的时候,CreateInfNotExists 总是抛出异常 "The remote server returned ...

  6. C&num;中的委托范例学习

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  7. HDOJ 2071 Max Num

    Problem Description There are some students in a class, Can you help teacher find the highest studen ...

  8. 实验用rootkit

    进程对比实验用得到rootkit: 1.FU rootkit 简单的来说,FU是一个隐藏进程的工具.,FU_Rootkit是开源的,用C语言编写.FU_Rootkit主程序包括2个部分:Fu.exe和 ...

  9. Java中的大小写字母相互转换(不利用Java自带的方法)

    Java中的大小写字母相互转换(不利用Java自带的方法) 1.设计源码 /** * * @title:UpperAndLower.java * @Package:com.you.utils * @D ...

  10. web前端页面设计小笔记

    input总是在点击的时候出现蓝色边框,这是input的默认属性,就算设置了border:none:也没有用! #解决方法:outline:none; 设置input框里的placeholder值得字 ...