在注册页面中,为了重置页面上所有的控件,编写了页面中重置按钮的单击事件
protected void btnReset_Click(object sender, EventArgs e)
{
Label2.Text="your hobby:";
//将CheckBoxList1中选中的内容呈现在标签Label2中。
for(int i=0;i<CheckBoxList1.Items.Count;i++)
{
if (CheckBoxList1.Items[i].Selected == true)
Label2.Text += "<br/>"+CheckBoxList1.Items[i].Value;
}
//遍历form1窗体中的所有控件,实现内容清空。
foreach (Control c in this.FindControl("form1").Controls)
{
if (c is TextBox)
{ ((TextBox)c).Text = ""; }
}
{
Label2.Text="your hobby:";
//将CheckBoxList1中选中的内容呈现在标签Label2中。
for(int i=0;i<CheckBoxList1.Items.Count;i++)
{
if (CheckBoxList1.Items[i].Selected == true)
Label2.Text += "<br/>"+CheckBoxList1.Items[i].Value;
}
//遍历form1窗体中的所有控件,实现内容清空。
foreach (Control c in this.FindControl("form1").Controls)
{
if (c is TextBox)
{ ((TextBox)c).Text = ""; }
}
今天在上完母版页内容后,当将注册页面应用到设计好的母版页后,执行过程中提示:
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
错误行代码为:foreach (Control c in this.FindControl("form1").Controls)
这说明在引入母版页的机制后,放在ContenPlaceHolder1内容页中的控件使用Page.FindControl方法无法找到。
MSDN对FindControl的解释:在当前的命名容器中搜索带指定 id 参数的服务器控件。
FindControl方法是在当前naming container查找指定ControlID对应的控件,该naming container是一个实现了INamingContainer接口的对象。
可以在该页的页指令中添加 Trace=Ture 指令来跟踪页面输出查看控件树。对页面启用跟踪,在控件树中可以看到内容页中所有控件的naming container为ContentPlaceHolder1。因此将上述查找控件的代码改写成:
this.Page.Master.FindControl("ContentPlaceHolder1").Controls
再运行,一切又恢复正常。
若要查找ID值为“TextBox1”的控件则代码如下:
this.Page.Master.FindControl("ContentPlaceHolder1").FindControl("TextBox1")