当前位置: 首页 > news >正文

扩展Label控件(1) - 实现回发(Postback)功能

Label控件 既强大又好用。为了让它更强大、更好用,我们来写一个继承自Label的控件。
[源码下载]


扩展Label控件(1) - 实现回发(Postback)功能


作者: webabcd


介绍
扩展Label控件:
通过注册HiddenField控件,使Label控件支持回发(Postback)功能

使用方法(设置属性):
EnablePostback - 是否启用Label控件的回发(Postback)
HiddenFieldPostfix - 使Label支持回发(Postback)的隐藏控件的后缀名


关键代码
ScriptLibrary.js
//---------------------------- 
// http://webabcd.cnblogs.com/ 
//---------------------------- 

function yy_sl_copyTextToHiddenField(source, destination) 

/// <summary>将Label控件的的值赋给隐藏控件</summary> 

        document.getElementById(destination).value = document.getElementById(source).innerHTML; 
}
 
SmartLabel.cs
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.Text; 
InBlock.gif 
InBlock.gif using System.Web.UI.WebControls; 
InBlock.gif using System.Web.UI; 
InBlock.gif 
InBlock.gif[assembly: System.Web.UI.WebResource( "YYControls.SmartLabel.Resources.ScriptLibrary.js""text/javascript")] 
InBlock.gif 
InBlock.gif namespace YYControls 
InBlock.gif
InBlock.gif         /// <summary> 
InBlock.gif         /// SmartLabel类,继承自DropDownList 
InBlock.gif         /// </summary> 
InBlock.gif        [ToolboxData( @"<{0}:SmartLabel runat='server'></{0}:SmartLabel>")] 
InBlock.gif        [System.Drawing.ToolboxBitmap( typeof(YYControls.Resources.Icon),  "SmartLabel.bmp")] 
InBlock.gif         public partial  class SmartLabel : Label 
InBlock.gif        { 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 构造函数 
InBlock.gif                 /// </summary> 
InBlock.gif                 public SmartLabel() 
InBlock.gif                { 
InBlock.gif 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// OnPreRender 
InBlock.gif                 /// </summary> 
InBlock.gif                 /// <param name="e">e</param> 
InBlock.gif                 protected  override  void OnPreRender(EventArgs e) 
InBlock.gif                { 
InBlock.gif                         base.OnPreRender(e); 
InBlock.gif 
InBlock.gif                         // 实现Label控件的回发(Postback)功能 
InBlock.gif                        ImplementPostback(); 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif}
 
Property.cs
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.Text; 
InBlock.gif 
InBlock.gif using System.ComponentModel; 
InBlock.gif using System.Web.UI; 
InBlock.gif 
InBlock.gif namespace YYControls 
InBlock.gif
InBlock.gif         /// <summary> 
InBlock.gif         /// SmartLabel类的属性部分 
InBlock.gif         /// </summary> 
InBlock.gif         public partial  class SmartLabel 
InBlock.gif        { 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 使Label支持回发(Postback)的隐藏控件的后缀名 
InBlock.gif                 /// </summary> 
InBlock.gif                [ 
InBlock.gif                Browsable( true), 
InBlock.gif                Description( "使Label支持回发(Postback)的隐藏控件的后缀名"), 
InBlock.gif                Category( "扩展"), 
InBlock.gif                DefaultValue( "EnablePostback"
InBlock.gif                ] 
InBlock.gif                 public  virtual  string HiddenFieldPostfix 
InBlock.gif                { 
InBlock.gif                        get 
InBlock.gif                        { 
InBlock.gif                                 string s = ( string)ViewState[ "HiddenFieldPostfix"]; 
InBlock.gif 
InBlock.gif                                 return (s ==  null) ?  "EnablePostback" : s; 
InBlock.gif                        } 
InBlock.gif                        set 
InBlock.gif                        { 
InBlock.gif                                ViewState[ "HiddenFieldPostfix"] = value; 
InBlock.gif                        } 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 是否启用Label控件的回发(Postback) 
InBlock.gif                 /// </summary> 
InBlock.gif                [ 
InBlock.gif                Browsable( true), 
InBlock.gif                Description( "是否启用Label控件的回发(Postback)"), 
InBlock.gif                Category( "扩展"), 
InBlock.gif                DefaultValue( false
InBlock.gif                ] 
InBlock.gif                 public  virtual  bool EnablePostback 
InBlock.gif                { 
InBlock.gif                        get 
InBlock.gif                        { 
InBlock.gif                                 bool? b = ( bool?)ViewState[ "EnablePostback"]; 
InBlock.gif 
InBlock.gif                                 return (b ==  null) ?  false : ( bool)b; 
InBlock.gif                        } 
InBlock.gif 
InBlock.gif                        set 
InBlock.gif                        { 
InBlock.gif                                ViewState[ "EnablePostback"] = value; 
InBlock.gif                        } 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif}
 
EnablePostback.cs
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.Text; 
InBlock.gif 
InBlock.gif using System.Data; 
InBlock.gif using System.Web.UI.WebControls; 
InBlock.gif using System.Web.UI; 
InBlock.gif using System.Web; 
InBlock.gif 
InBlock.gif namespace YYControls 
InBlock.gif
InBlock.gif         /// <summary> 
InBlock.gif         /// SmartLabel类的属性部分 
InBlock.gif         /// </summary> 
InBlock.gif         public partial  class SmartLabel 
InBlock.gif        { 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 实现Label控件的回发(Postback)功能 
InBlock.gif                 /// </summary> 
InBlock.gif                 private  void ImplementPostback() 
InBlock.gif                { 
InBlock.gif                         if ( this.EnablePostback) 
InBlock.gif                        { 
InBlock.gif                                 // 使Label支持回发(Postback)的隐藏控件的ID 
InBlock.gif                                 string hiddenFieldId =  string.Concat( this.ClientID,  "_", HiddenFieldPostfix); 
InBlock.gif 
InBlock.gif                                 // 注册隐藏控件 
InBlock.gif                                Page.ClientScript.RegisterHiddenField(hiddenFieldId, ""); 
InBlock.gif 
InBlock.gif                                 // 注册客户端脚本 
InBlock.gif                                 this.Page.ClientScript.RegisterClientScriptResource( this.GetType(), 
InBlock.gif                                         "YYControls.SmartLabel.Resources.ScriptLibrary.js"); 
InBlock.gif 
InBlock.gif                                 // 表单提交前将Label控件的的值赋给隐藏控件 
InBlock.gif                                 this.Page.ClientScript.RegisterOnSubmitStatement( this.GetType(), 
InBlock.gif                                         string.Format( "yy_sl_enablePostback_{0}"
InBlock.gif                                                 this.ClientID), 
InBlock.gif                                         string.Format( "yy_sl_copyTextToHiddenField('{0}', '{1}')"
InBlock.gif                                                 this.ClientID, 
InBlock.gif                                                hiddenFieldId)); 
InBlock.gif                        } 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 获取或设置 YYControls.SmartLabel 控件的文本内容 
InBlock.gif                 /// </summary> 
InBlock.gif                 public  override  string Text 
InBlock.gif                { 
InBlock.gif                        get 
InBlock.gif                        { 
InBlock.gif                                 try 
InBlock.gif                                { 
InBlock.gif                                         if ( this.EnablePostback && ! string.IsNullOrEmpty(HttpContext.Current.Request[ string.Concat( this.ClientID,  "_", HiddenFieldPostfix)])) 
InBlock.gif                                        { 
InBlock.gif                                                 // 隐藏控件的值 
InBlock.gif                                                 return HttpContext.Current.Request[ string.Concat( this.ClientID,  "_", HiddenFieldPostfix)]; 
InBlock.gif                                        } 
InBlock.gif                                         else 
InBlock.gif                                        { 
InBlock.gif                                                 return  base.Text; 
InBlock.gif                                        } 
InBlock.gif                                } 
InBlock.gif                                 catch 
InBlock.gif                                { 
InBlock.gif                                         return  base.Text; 
InBlock.gif                                } 
InBlock.gif                        } 
InBlock.gif                        set 
InBlock.gif                        { 
InBlock.gif                                 try 
InBlock.gif                                { 
InBlock.gif                                         if ( this.EnablePostback && ! string.IsNullOrEmpty(HttpContext.Current.Request[ string.Concat( this.ClientID,  "_", HiddenFieldPostfix)])) 
InBlock.gif                                        { 
InBlock.gif                                                 // 隐藏控件的值 
InBlock.gif                                                 base.Text = HttpContext.Current.Request[ string.Concat( this.ClientID,  "_", HiddenFieldPostfix)]; 
InBlock.gif                                        } 
InBlock.gif                                         else 
InBlock.gif                                        { 
InBlock.gif                                                 base.Text = value; 
InBlock.gif                                        } 
InBlock.gif                                } 
InBlock.gif                                 catch 
InBlock.gif                                { 
InBlock.gif                                         base.Text = value; 
InBlock.gif                                } 
InBlock.gif                        } 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif}
 

OK
[源码下载]



     本文转自webabcd 51CTO博客,原文链接: http://blog.51cto.com/webabcd/345424 ,如需转载请自行联系原作者

相关文章:

  • 使用 Github Pages 发布你的项目文档
  • 解决客户一例:使用域超级管理员打开Exchange 2010发现没有权限
  • AngualrJs 微信支付url未注册大坑解决方法
  • mac终端下svn常用命令
  • http协议进阶(四)报文首部
  • QName
  • 浅议tomcat与classloader
  • Java中的匿名内部类
  • 移动端点击作弊与激活作弊的现象与预警
  • IT人员的职业生涯规划
  • 电话号码校验
  • /var/spool/postfix/maildrop 下有大量文件
  • kubernetes test-infra
  • 关于Mysql查看某个ip连接数及删除掉这个ip连接的方法(也可以进行mysql锁表解锁)...
  • Impala数据处理(加载和存储)
  • 4. 路由到控制器 - Laravel从零开始教程
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • js继承的实现方法
  • Map集合、散列表、红黑树介绍
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Python十分钟制作属于你自己的个性logo
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • XForms - 更强大的Form
  • 创建一种深思熟虑的文化
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 通过npm或yarn自动生成vue组件
  • 通过几道题目学习二叉搜索树
  • 物联网链路协议
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​第20课 在Android Native开发中加入新的C++类
  • #14vue3生成表单并跳转到外部地址的方式
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C++17) optional的使用
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (阿里云万网)-域名注册购买实名流程
  • (二)WCF的Binding模型
  • (正则)提取页面里的img标签
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .libPaths()设置包加载目录
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NetCore部署微服务(二)
  • .net打印*三角形
  • @private @protected @public