源码
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 这是什么原因?先谢了
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 这是什么原因?先谢了
改成
ToolboxData("<{0}:WebTime runat=server>sdfsdfsdf</{0}:WebTime>")]
试试www.evget.com
慧都控件网
晕,这样不行
赋值地方放错了