找不到服务器控件

时间:2012-09-30 06:30:10

标签: c# asp.net visual-studio

我是ASP.NET的新手,但是不断给我带来麻烦的是找到嵌套的服务器控件,尤其是当它们嵌套时。

在这种情况下,这是我的注册页面,直到我想要的服务器控件:

<asp:CreateUserWizard runat="server" ID="RegisterUser" ViewStateMode="Disabled" OnCreatedUser="RegisterUser_CreatedUser">
    <LayoutTemplate>
        <asp:PlaceHolder runat="server" ID="wizardStepPlaceholder" />
        <asp:PlaceHolder runat="server" ID="navigationPlaceholder" />
    </LayoutTemplate>
    <WizardSteps>
        <asp:CreateUserWizardStep runat="server" ID="RegisterUserWizardStep">
            <ContentTemplate>
                <fieldset>
                    <ol>
                        <li>
                            <asp:TextBox runat="server" ID="firstName" />
                        </li>

为了便于阅读,我删除的唯一内容是一些HTML元素。我正在尝试访问'firstName'。我已经尝试了以下所有操作,但没有运气,(TextBox首先总是空出来)。

TextBox first = (TextBox)Page.Master.FindControl("MainContent").FindControl("firstName");
TextBox first = (TextBox)Page.FindControl("firstName");
TextBox first = (TextBox)RegisterUserWizardStep.FindControl("firstName");
TextBox first = (TextBox)RegisterUser.FindControl("firstName");

非常感谢帮助,谢谢!

2 个答案:

答案 0 :(得分:2)

通常,您可能需要进行递归控制搜索。首先,将此方法添加到您的页面:

private Control FindControlRecursive(Control Root, string Id)
{
    if (Root.ID == Id)
        return Root;
    foreach (Control Ctl in Root.Controls)
    {
        Control FoundCtl = FindControlRecursive(Ctl, Id);
        if (FoundCtl != null)
            return FoundCtl;
    }
    return null;
}

现在,要找到控件,请调用:

TextBox firstName = (TextBox)FindControlRecursive(this, "firstName");

答案 1 :(得分:1)

试试这段代码:

TextBox first = (TextBox) RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("firstName");