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

            }

        }

    }

}



OK
[源码下载]
posted @ 2008-01-22 08:42  webabcd  阅读(8740)  评论(63编辑  收藏  举报