zoukankan      html  css  js  c++  java
  • 服务器控件数据回发实现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的回发绑定。

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

  • 相关阅读:
    巴洛克式和哥特式的区别
    推荐阅读书籍,是时候再行动起来了。
    AtCoder ABC 159F Knapsack for All Segments
    AtCoder ABC 159E Dividing Chocolate
    AtCoder ABC 158F Removing Robots
    AtCoder ABC 158E Divisible Substring
    AtCoder ABC 157F Yakiniku Optimization Problem
    AtCoder ABC 157E Simple String Queries
    AtCoder ABC 157D Friend Suggestions
    AtCoder ABC 156F Modularness
  • 原文地址:https://www.cnblogs.com/shikyoh/p/3478970.html
Copyright © 2011-2022 走看看