使用母版页后出现控件,使用FindControl找不到指定控件

在注册页面中,为了重置页面上所有的控件,编写了页面中重置按钮的单击事件 

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 = "";   }
}

今天在上完母版页内容后,当将注册页面应用到设计好的母版页后,执行过程中提示:
异常详细信息: 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")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值