扩展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
using System; 
using System.Collections.Generic; 
using System.Text; 
 
using System.Web.UI.WebControls; 
using System.Web.UI; 
 
[assembly: System.Web.UI.WebResource( "YYControls.SmartLabel.Resources.ScriptLibrary.js""text/javascript")] 
 
namespace YYControls 

         /// <summary> 
         /// SmartLabel类,继承自DropDownList 
         /// </summary> 
        [ToolboxData( @"<{0}:SmartLabel runat='server'></{0}:SmartLabel>")] 
        [System.Drawing.ToolboxBitmap( typeof(YYControls.Resources.Icon),  "SmartLabel.bmp")] 
         public partial  class SmartLabel : Label 
        { 
                 /// <summary> 
                 /// 构造函数 
                 /// </summary> 
                 public SmartLabel() 
                { 
 
                } 
 
                 /// <summary> 
                 /// OnPreRender 
                 /// </summary> 
                 /// <param name="e">e</param> 
                 protected  override  void OnPreRender(EventArgs e) 
                { 
                         base.OnPreRender(e); 
 
                         // 实现Label控件的回发(Postback)功能 
                        ImplementPostback(); 
                } 
        } 
}
 
Property.cs
using System; 
using System.Collections.Generic; 
using System.Text; 
 
using System.ComponentModel; 
using System.Web.UI; 
 
namespace YYControls 

         /// <summary> 
         /// SmartLabel类的属性部分 
         /// </summary> 
         public partial  class SmartLabel 
        { 
                 /// <summary> 
                 /// 使Label支持回发(Postback)的隐藏控件的后缀名 
                 /// </summary> 
                [ 
                Browsable( true), 
                Description( "使Label支持回发(Postback)的隐藏控件的后缀名"), 
                Category( "扩展"), 
                DefaultValue( "EnablePostback"
                ] 
                 public  virtual  string HiddenFieldPostfix 
                { 
                        get 
                        { 
                                 string s = ( string)ViewState[ "HiddenFieldPostfix"]; 
 
                                 return (s ==  null) ?  "EnablePostback" : s; 
                        } 
                        set 
                        { 
                                ViewState[ "HiddenFieldPostfix"] = value; 
                        } 
                } 
 
                 /// <summary> 
                 /// 是否启用Label控件的回发(Postback) 
                 /// </summary> 
                [ 
                Browsable( true), 
                Description( "是否启用Label控件的回发(Postback)"), 
                Category( "扩展"), 
                DefaultValue( false
                ] 
                 public  virtual  bool EnablePostback 
                { 
                        get 
                        { 
                                 bool? b = ( bool?)ViewState[ "EnablePostback"]; 
 
                                 return (b ==  null) ?  false : ( bool)b; 
                        } 
 
                        set 
                        { 
                                ViewState[ "EnablePostback"] = value; 
                        } 
                } 
        } 
}
 
EnablePostback.cs
using System; 
using System.Collections.Generic; 
using System.Text; 
 
using System.Data; 
using System.Web.UI.WebControls; 
using System.Web.UI; 
using System.Web; 
 
namespace YYControls 

         /// <summary> 
         /// SmartLabel类的属性部分 
         /// </summary> 
         public partial  class SmartLabel 
        { 
                 /// <summary> 
                 /// 实现Label控件的回发(Postback)功能 
                 /// </summary> 
                 private  void ImplementPostback() 
                { 
                         if ( this.EnablePostback) 
                        { 
                                 // 使Label支持回发(Postback)的隐藏控件的ID 
                                 string hiddenFieldId =  string.Concat( this.ClientID,  "_", HiddenFieldPostfix); 
 
                                 // 注册隐藏控件 
                                Page.ClientScript.RegisterHiddenField(hiddenFieldId, ""); 
 
                                 // 注册客户端脚本 
                                 this.Page.ClientScript.RegisterClientScriptResource( this.GetType(), 
                                         "YYControls.SmartLabel.Resources.ScriptLibrary.js"); 
 
                                 // 表单提交前将Label控件的的值赋给隐藏控件 
                                 this.Page.ClientScript.RegisterOnSubmitStatement( this.GetType(), 
                                         string.Format( "yy_sl_enablePostback_{0}"
                                                 this.ClientID), 
                                         string.Format( "yy_sl_copyTextToHiddenField('{0}', '{1}')"
                                                 this.ClientID, 
                                                hiddenFieldId)); 
                        } 
                } 
 
                 /// <summary> 
                 /// 获取或设置 YYControls.SmartLabel 控件的文本内容 
                 /// </summary> 
                 public  override  string Text 
                { 
                        get 
                        { 
                                 try 
                                { 
                                         if ( this.EnablePostback && ! string.IsNullOrEmpty(HttpContext.Current.Request[ string.Concat( this.ClientID,  "_", HiddenFieldPostfix)])) 
                                        { 
                                                 // 隐藏控件的值 
                                                 return HttpContext.Current.Request[ string.Concat( this.ClientID,  "_", HiddenFieldPostfix)]; 
                                        } 
                                         else 
                                        { 
                                                 return  base.Text; 
                                        } 
                                } 
                                 catch 
                                { 
                                         return  base.Text; 
                                } 
                        } 
                        set 
                        { 
                                 try 
                                { 
                                         if ( this.EnablePostback && ! string.IsNullOrEmpty(HttpContext.Current.Request[ string.Concat( this.ClientID,  "_", HiddenFieldPostfix)])) 
                                        { 
                                                 // 隐藏控件的值 
                                                 base.Text = HttpContext.Current.Request[ string.Concat( this.ClientID,  "_", HiddenFieldPostfix)]; 
                                        } 
                                         else 
                                        { 
                                                 base.Text = value; 
                                        } 
                                } 
                                 catch 
                                { 
                                         base.Text = value; 
                                } 
                        } 
                } 
        } 
}
 



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

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