• 服务器控件数据回发实现IPostBackDataHandler需注意的


    我写的服务器控件(未完,模型如此)

    using System;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using System.ComponentModel;
    using System.Linq;
    using System.Resources;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    
    namespace DecColorPicker
    {
        [DefaultProperty("DecColorPickerControl")]
        [ToolboxData("<{0}:DecColorPickerControl runat=server></{0}:DecColorPickerControl>")]
        public class DecColorPickerControl : WebControl, IPostBackDataHandler
        {
    
            public string ColorValue
            {
                get
                {
                    string viewstr = this.ID + "_ColorValue";
                    object text = ViewState[viewstr];
                    if (text == null)
                        return string.Empty;
                    else
                        return (string)text;
                }
                set
                {
                    string viewstr = this.ID + "_ColorValue";
                    ViewState[viewstr] = value;
                }
            }
    
            public string DivContranerID
            {
                get
                {
                    string viewstr = this.ID + "_DivContranerID";
                    String s = (String)ViewState[viewstr];
                    return ((s == null) ? this.ID + "DecTextBox" : s);
                }
    
                set
                {
                    string viewstr = this.ID + "_DivContranerID";
                    ViewState[viewstr] = value;
                }
            }
    
            public string PickerBtnID
            {
                get
                {
                    string viewstr = this.ID + "_PickerBtnID";
                    String s = (String)ViewState[viewstr];
                    return ((s == null) ? this.ID + "_PickerBtn" : s);
                }
    
                set
                {
                    string viewstr = this.ID + "_PickerBtnID";
                    ViewState[viewstr] = value;
                }
            }
    
            [Description("设置按钮的文本")]
            public string PickerBtnText
            {
                get
                {
                    string viewstr = this.ID + "_PickerBtnText";
                    String s = (String)ViewState[viewstr];
                    return ((s == null) ? "选择颜色" : s);
                }
    
                set
                {
                    string viewstr = this.ID + "_PickerBtnText";
                    ViewState[viewstr] = value;
                }
            }
    
            [Description("是否显示按钮")]
            public bool ShowPickerBtn
            {
                get
                {
                    string viewstr = this.ID + "_ShowPickerBtn";
                    var s = ViewState[viewstr];
                    return s == null ? true : (Convert.ToBoolean(s));
                }
    
                set
                {
                    string viewstr = this.ID + "_ShowPickerBtn";
                    ViewState[viewstr] = value;
                }
            }
    
            #region 选择器配置
    
            [Bindable(false), DefaultValue(""), Browsable(true), Description("颜色选择器的宽度"), Category("选择器设置")]
            public string PickerWidth
            {
                get
                {
                    string viewstr = this.ID + "_PickerWidth";
                    String s = (String)ViewState[viewstr];
                    return ((s == null) ? "" : s);
                }
                set
                {
                    string viewstr = this.ID + "_PickerWidth";
                    ViewState[viewstr] = value;
                }
            }
            [Bindable(false), DefaultValue(""), Browsable(true), Description("颜色选择器的高度"), Category("选择器设置")]
            public string PickerHeight
            {
                get
                {
                    string viewstr = this.ID + "_PickerHeight";
                    String s = (String)ViewState[viewstr];
                    return ((s == null) ? "" : s);
                }
                set
                {
                    string viewstr = this.ID + "_PickerHeight";
                    ViewState[viewstr] = value;
                }
            }
    
            #endregion
    
            public string Text
            {
                get
                {
                    object text = ViewState["Text"];
                    if (text == null)
                        return string.Empty;
                    else
                        return (string)text;
                }
                set
                {
                    ViewState["Text"] = value;
                }
            }
            public event EventHandler TextChanged;
    
            protected void OnTextChanged(EventArgs e)
            {
                if (TextChanged != null)
                    TextChanged(this, e);
            }
    
            public bool LoadPostData(string postDataKey, NameValueCollection postCollection)
            {
                string postedData = postCollection[postDataKey];//回发回来的字符串
    
                if (!this.ColorValue.Equals(postedData))
                {
                    this.ColorValue = postedData;
                    return true;
                }
                else
                {
                    return false;
                }
            }
    
            public void RaisePostDataChangedEvent()
            {
                OnTextChanged(EventArgs.Empty);
            }
            protected override void Render(HtmlTextWriter writer)
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendFormat("<div id="{0}">", this.DivContranerID);
                sb.AppendFormat("<script>{0}</script>", DecColorPicker.Properties.Resources.colorPicker);
                //注意此处必须为UniqueID 原因是与LoadPostData的postDataKey 一一对应 lcc
                sb.AppendFormat("<input type='text' onclick='colorPicker(event)' id='{0}' name='{0}' />", this.UniqueID);
                if (this.ShowPickerBtn)
                {
                    sb.AppendFormat("<input type="button" value="{0}" onclick="document.getElementById('{1}').click();">", this.PickerBtnText, this.UniqueID);
    
                }
                sb.Append("</div>");
                writer.Write(sb.ToString());
    
            }
        }
    }

    注意:
    sb.AppendFormat("<input type='text' onclick='colorPicker(event)' id='{0}' name='{0}' />", this.UniqueID);

    这个textbox的ID必须为UniqueID,如果填写别的ID将无法进行PostData的回发绑定。

    此问题我纠结了很久。才发现的。。。。

  • 相关阅读:
    Linux学习 -- Shell编程 -- 字符截取命令
    Linux学习 -- Shell编程 -- 正则表达式
    Linux学习 -- Shell基础 -- Bash变量
    Linux学习 -- Shell基础 -- Bash基本功能
    Linux学习 -- Shell基础 -- 概述
    Linux学习 -- 备份与恢复
    Linux学习 -- 启动管理
    Linux学习 -- 日志管理
    chapter9_3 协同程序实现迭代器
    chapter9_2 管道与过滤器
  • 原文地址:https://www.cnblogs.com/shikyoh/p/3478970.html
Copyright © 2020-2023  润新知