扩展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}
 



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

相关文章
|
C# 前端开发
wpf中的datagrid绑定操作按钮是否显示或者隐藏
如图,需要在wpf中的datagrid的操作那列有个确认按钮,然后在某些条件下确认按钮可见,某些情况下不可见的,放在mvc里直接在cshtml页面中if..else就行了。 但是在wpf里不行。。网上搜索了好久才找到解决方法,原来只是binding那个visiable属性就行了,
6850 0
|
C#
WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果
原文:WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果   本以为Label也有TextChanged 事件,但在使用的时候却没找到,网友说Label的Content属性改变肯定是使用赋值操作,赋值的时候就可以对其进行相应的操作所以不需TextChanged 事件。
1960 0