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
    [源码下载]
  • 相关阅读:
    ZOJ 1002 Fire Net (火力网)
    UVa OJ 117 The Postal Worker Rings Once (让邮差只走一圈)
    UVa OJ 118 Mutant Flatworld Explorers (变体扁平世界探索器)
    UVa OJ 103 Stacking Boxes (嵌套盒子)
    UVa OJ 110 MetaLoopless Sorts (无循环元排序)
    第一次遇到使用NSNull的场景
    NSURL使用浅析
    从CNTV下载《小小智慧树》
    NSDictionary and NSMutableDictionary
    Category in static library
  • 原文地址:https://www.cnblogs.com/webabcd/p/1048018.html
Copyright © 2011-2022 走看看