今天在做一个论坛回复的模板的时候,碰到了一些问题。我是在WebUserControl中,很简单的,我就添加了<asp:Lable>和<asp:TextBox>服务器控件,但是我在Music.aspx中使用这个WebUserControl的时候,编译的时候,弹出了如下错误:
类型"TextBox"的控件"ctl01_TextBox1"必须放在具有 runat=server的窗体标记内。
原来在Music.aspx在处理WebUserControl控件的时候,是以Form的形式,提交给服务端,再由服务端处理相应的事件。但我们知道,在用户自定义控件中,并不能包含有<html>、<body>和<form>元素,因此编译的时候会有该错误。显然我们不可以直接在WebUserControl中增加一个<form>标签。我们知道,ASP.NET 2.0服务器控件(HTML服务器控件和Web服务器控件)是否必须需要放在<form runat=server></form>的标记之中,可以根据需要进行设置,大多数情况下,对于只用来进行界面显示的控件、并且不需要处理事件的控件,可以不放在<form runat=server></form>之间,对于大多数控件来说,是要在服务器端进行事件处理和获得某些返回值的,因此需要放在<form runat=server></form>之间。因此,我们可以在用户控件中直接拖放不需要事件处理的控件,而换成拖放一个html服务器控件来代替,把上面的<asp:TextBox>换成<textarea>就可以了。对于其余更好的解决方法,有待发现。