为什么asp.net找不到我的文本框?

时间:2010-05-05 12:35:58

标签: c# asp.net web-controls

我正在尝试向CreateUserWizardStep添加更多字段,这是我添加的内容:

<asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server">
    <ContentTemplate>
        <table border="0">
            <tr>
                <td align="right">
                    <asp:Label ID="NickNameLabel" runat="server" AssociatedControlID="NickName">Nick Name:</asp:Label>
                </td>
                <td>
                    <asp:TextBox ID="NickName" runat="server"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="NickName"
                        ErrorMessage="Nick Name is required." ToolTip="Nick Name is required." ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
                </td>
            </tr>
            <%-- The default code is left unchanged, but not shown here --%>
        </table>
    </ContentTemplate>
</asp:CreateUserWizardStep>

然后我尝试引用像这样的对象

protected void NewUserWizard_CreatedUser(object sender, EventArgs e)
{
    CreateUserWizardStep step = NewUserWizard.FindControl("CreateUserWizardStep1") as CreateUserWizardStep;
    TextBox nickName = step.FindControl("NickName") as TextBox;
    // insert additional information to the database
}

问题是,我为nickName获取了空值。我错误地使用FindControl("")吗?

3 个答案:

答案 0 :(得分:3)

您可能希望使用递归查找控制功能,例如:http://stevesmithblog.com/blog/recursive-findcontrol/

答案 1 :(得分:2)

FindControl

  

在当前命名容器中搜索指定的服务器控件。

即。它只检查当前容器直接子项。

您可以使用Controls属性返回step的所有子项:

ControlCollection children = step.Controls;

并枚举这个寻找你的文本框。

答案 2 :(得分:0)

我自己不知道控件,但 CreateUserWizardStep1.NickNameLabel 不工作吗?