源码
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Text;namespace MyWebControl
{
    /// <summary>
    /// WebTime 的摘要说明。
    /// </summary>
    [DefaultProperty("Text"), 
        ToolboxData("<{0}:WebTime runat=server></{0}:WebTime>")]
    public class WebTime : System.Web.UI.WebControls.WebControl,IStateManager
    {
        private string timeS;
        private string timeF;
        private string timeM;
        private string JscriptID;        private bool SaveViewFlag = false;
    
        [Bindable(true),Category("Data"),DefaultValue("")] 
        public string TimeS 
        {
            get
            {
                return timeS;
            }            set
            {
                timeS = value;
            }
        }        [Bindable(true),Category("Data"),DefaultValue("")] 
        public string TimeF
        {
            get
            {
                return timeF;
            }            set
            {
                timeF = value;
            }
        }        [Bindable(true),Category("Data"),DefaultValue("")] 
        public string TimeM 
        {
            get
            {
                return timeM;
            }            set
            {
                timeM = value;
            }
        }
        /// <summary>
        /// 输出HTML
        /// </summary>
        /// <returns>返回控件html输出</returns>
        protected virtual string  OutPutHtml()
        {
            StringBuilder str;
            str = new StringBuilder();
            str.Append("<div id=\"" + this.UniqueID + "\" style=\"BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 2px solid; BORDER-LEFT: #000000 2px solid; BORDER-BOTTOM: #000000 1px solid;width:80px\">\n");
            str.Append("    <TABLE id=\"Table1\" cellSpacing=\"0\" cellPadding=\"0\" width=\"80\" align=\"center\" border=\"0\">\n");
            str.Append("        <TR>\n");
            str.Append("            <TD rowspan=\"2\" width=\"80px\" valign=\"middle\" height=\"20px\">\n");
            str.Append("                <TABLE id=\"Table2\" width=\"100%\" border=\"0\" height=\"100%\">\n");
            str.Append("                    <TR>\n");
            str.Append("                        <TD><input id=\"Times\" style=\"width:20px;\" value=\"" + timeS +"\"></TD>\n");
            str.Append("                        <TD width=\"1px\">:</TD>\n");
            str.Append("                        <TD><input id=\"Timem\" style=\"width:20px;\" value=\"" + timeF +"\"></TD>\n");
            str.Append("                        <TD width=\"1px\">:</TD>\n");
            str.Append("                        <TD><input id=\"Timef\" style=\"width:20px;\" value=\"" + timeM +"\"></TD>\n");
            str.Append("                    </TR>\n");
            str.Append("                </TABLE>\n");
            str.Append("            </TD>\n");
            str.Append("            <TD align=\"center\" height=\"10px\" style=\"cursor:default;\" onclick=\"TimeAdd()\"><FONT face=\"Marlett\" size=\"2\">5</FONT></TD>\n");
            str.Append("        </TR>\n");
            str.Append("        <TR>\n");
            str.Append("            <TD align=\"center\" height=\"10px\" style=\"cursor:default;\" onclick=\"TimeSub()\"><FONT face=\"Marlett\" size=\"2\">6</FONT></TD>\n");
            str.Append("        </TR>\n");
            str.Append("    </TABLE>\n");
            str.Append("</div>\n");            return str.ToString();
        }
        
        private string OutPutJScript()
        {
            JscriptID = "{E005A7AD-B870-4dc8-947B-379B367972C3}";
            StringBuilder str;
            str = new StringBuilder();
            str.Append("function TimeAdd()\n");
            str.Append("{\n");
            str.Append("    alert(\"增加\");\n");
            str.Append("}\n");
            str.Append("function TimeSub()\n");
            str.Append("{\n");
            str.Append("    alert(\"减少\");\n");
            str.Append("}\n");            return str.ToString();
        }        /// <summary> 
        /// 将此控件呈现给指定的输出参数。
        /// </summary>
        /// <param name="output"> 要写出到的 HTML 编写器 </param>
        protected override void Render(HtmlTextWriter output)
        {
            output.Write(OutPutHtml());
        }        /// <summary>
        /// 输出JS
        /// </summary>
        /// <param name="e"></param>
        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender (e);
            if(!Page.IsClientScriptBlockRegistered(JscriptID))
                Page.RegisterClientScriptBlock(JscriptID,OutPutJScript());
        }        #region IStateManager 成员        void IStateManager.TrackViewState()
        {
            // TODO:  添加 WebTime.TrackViewState 实现]
            SaveViewFlag = true;
        }        bool IStateManager.IsTrackingViewState
        {
            get
            {
                // TODO:  添加 WebTime.IsTrackingViewState getter 实现
                return SaveViewFlag;
            }
        }        object IStateManager.SaveViewState()
        {
            // TODO:  添加 WebTime.SaveViewState 实现
            object [] obj = new object[3];
            obj[0] = timeS;
            obj[1] = timeF;
            obj[2] = timeM;
            return obj;
        }        void IStateManager.LoadViewState(object state)
        {
            // TODO:  添加 WebTime.LoadViewState 实现
            object[] obj = (object[])state;
            timeS = (string)obj[0];
            timeF = (string)obj[1];
            timeM = (string)obj[2];
        }
        #endregion
    }
}问题:编译不出错!设计器界面能正常显示
但测试运行就报如下错误键不能为空。参数名: key 这是什么原因?先谢了