为什么要使用FindControl ......?

时间:2012-04-05 07:49:28

标签: asp.net

我遇到了一个问题,我正在动态地向placeHolder添加文本框。

placeHolder声明:

<asp:PlaceHolder ID="phTextBoxes" runat="server" >
  </asp:PlaceHolder>

分配TextBoxes

 ...if (phTextBoxes!= null) phTextBoxes.Controls.Add(txt);

但是当我构建应用程序时,我收到了错误

当前上下文中不存在名称“phTextBoxes” 我已经使用 FindControl()解决了这个问题,如下所示。

PlaceHolder phtxt = (PlaceHolder)form1.FindControl("phTextBoxes");

然后将控件添加到phtxt。 错误消失了。 但我想知道为什么旧的placeHolder发出错误,FindControl是如何找到它的。

1 个答案:

答案 0 :(得分:0)

正如之前提到的@GrahamClark,你可能会遗漏一些东西。没有办法不在代码中看到phTextBox,除非它在另一个控件中,如GridView等。确保你的占位符不在任何其他控件内。

另一件事,在Designer窗口(aspx或ascx文件)的顶部,确保您在 CodeBehind / * CodeFile *中引用了相关的类名,如有必要,继承

示例1:我有一个名为 UC1 的用户控件,在ascx文件中我应该声明类名,如下所示:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Cart.ascx.cs"
 Inherits="UserControls_UC1" %>

示例2:我有一个名为默认的ASPX页面,在aspx文件中我应该声明类名,如下所示:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
 Inherits="_Default" %>