为什么我不能通过ID引用TextBox当它在CreateUserWizard控件中?

时间:2009-07-14 16:23:12

标签: asp.net element code-behind

我在这里遇到了一个奇怪的问题。

在asp.net CreateUserWizard中,我有一些元素,但我似乎无法从我的代码隐藏中访问它们。

以下是代码段:

标记:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CreateUserWizard.ascx.cs" Inherits="Web.UserControls.CreateUserWizard" %>
<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" OnCreatingUser="CreatingUser">
<WizardSteps>
    <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server">
        <ContentTemplate>
            <table border="0">
               <tr>
                    <td>
                        <span class="requiredField"/>
                        <asp:Label ID="NameLabel" runat="server" AssociatedControlID="NameRequiredFieldValidator">Navn:</asp:Label>                      
                        <asp:CheckBox ID="ShareInfoCheckBox" runat="server" Checked="True" Text="Share my information with partner sites." />
                    </td>
                    <td>
                        <asp:TextBox ID="Name" runat="server"></asp:TextBox>
                        <asp:RequiredFieldValidator ID="NameRequiredFieldValidator" runat="server" 
                            ControlToValidate="Name" ErrorMessage="Du skal indtaste dit navn" 
                            ToolTip="Du skal indtaste dit navn" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
                    </td>
                </tr>
             </ContentTemplate>
    </asp:CreateUserWizardStep>
</WizardSteps>
</asp:CreateUserWizard>

..这是代码隐藏:

public partial class CreateUserWizard : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void CreatingUser(object sender, EventArgs e)
    {
        Name. //no intellisense and compiler error when I try to access Name
    }
}

不应该这样吗?如果它有任何区别,它在UserControl中。

提前致谢

4 个答案:

答案 0 :(得分:10)

TextBox nameTextBox =
  CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("Name") as TextBox;

if (nameTextBox != null) {
    /* Do your stuff */
}

更多示例here

答案 1 :(得分:3)

试试这个:

((TextBox)CreateUserWizardStep1.FindControl("Name")).Text = "Hello";

原因是您的文本框位于另一个对象中,因此您无法直接访问它。

答案 2 :(得分:0)

在某处还有其他名称为'Name',成员变量或属性?尝试给控件一个不太通用的名称,如“Navn”或不太可能发生冲突的东西。

答案 3 :(得分:0)

Sean Bright有正确的想法如何实现它。

就“为什么”而言:这是一个模板化控件,因此您尝试访问的项目存在于另一个命名容器中。您可以使用Control.FindControl函数来访问所需的控件。

This is a good article that explains templated controls.

或者对于此向导控件的其他预定义字段,您可以使用CreateUserWizard1.UserName / Email / Password等来访问这些值。