请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
答:
foreach (System.Windows.Forms.Control control inthis.Controls)
{
if (control isSystem.Windows.Forms.TextBox)
{
System.Windows.Forms.TextBoxtb =(System.Windows.Forms.TextBox)control;
tb.Text= String.Empty ;
}
}
或者
foreach(Control c in this.controls)
{
if(c is TextBox)//其他控件只需简单修改即可,方法类似
{
TextBox tb=(TextBox)c;
tb.Text=String.empty;
}
}
上边的方法只是针对于c/s模式的
如果要针对于web开发中怎么实现呢?
首先.aspx文件一定会包含一个:<form id="form1"runat="server"> 只有在此标记中的代码享有和后台交换。
由此:
foreach(System.Web.UI.Controlctlinthis.Form.Controls){
Response.Write(ctl.ToString()+"<br/>");
if (ctlisSystem.Web.UI.WebControls.TextBox)
{
System.Web.UI.WebControls.TextBox tb =(System.Web.UI.WebControls.TextBox)ctl;
tb.Text = string.Empty;
}
}
此处需要注意的是:System.Web.UI.Control表示:web界面上的所有的控件,包括html控件和服务器端控件。
具体表现是:
System.Web.UI.LiteralControl此控件在页面上是:<label></label>
System.Web.UI.HtmlControls.HtmlInputText此控件在页面上是:<input type="text"/>
System.Web.UI.WebControls.Button此控件是服务器端:<asp:Button ID="Button1"runat="server" />
那么,如果我想限定只遍历服务器端的控件怎么办?
foreach(System.Web.UI.WebControls.WebControlctlinthis.Form.Controls){
问题就来了,因为this.Form.Controls这个集合是包括html控件和服务器控件的,那么在遍历时,html控件转换不了服务器控件,就报错了:
无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.WebControl”。
然而,this.Form没有WebControl属性,也就无法区分开来。
那么,如果我用this.Controls或者this.Page.Controls那么结果又是如何呢?
这样一来是获取整个页面的,那么他是不会包含页面控件的子控件的。
输出结果是:
System.Web.UI.HtmlControls.HtmlHead
System.Web.UI.LiteralControl
System.Web.UI.HtmlControls.HtmlForm
所有,在遍历页面元素时,最好要知道元素块,同时获得的控件集也是评级的控件。(可以递归遍历全部控件:利用控件的HasControls属性)