1

我是 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 first 总是为空)。

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");

非常感谢帮助,谢谢!

4

2 回答 2

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");
于 2012-09-30T06:37:21.820 回答
1

试试这段代码:

TextBox first = (TextBox) RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("firstName");
于 2012-09-30T06:35:46.937 回答