zoukankan      html  css  js  c++  java
  • 扩展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
    [源码下载]
  • 相关阅读:
    CLR via C#(11)-无参属性、索引器
    CLR via C#(10)-参数
    C#委托的介绍(delegate、Action、Func、predicate)
    MVC3使用Unity实现接口自动注册
    CLR via C#(09)-扩展方法
    CLR via C#(08)-操作符
    CLR via C#(07)-静态类,分部类
    CLR via C#(06)- 构造器
    VS2010几款超赞的扩展辅助工具总结
    web前端开发随手笔记
  • 原文地址:https://www.cnblogs.com/webabcd/p/1048018.html
Copyright © 2011-2022 走看看