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 は常に null になります)。

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 に答える