2

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

在 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

4 回答 4

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

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

更多例子在这里

于 2009-07-14T16:32:19.967 回答
3

试试这个:

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

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

于 2009-07-14T16:32:00.780 回答
0

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

于 2009-07-14T16:29:09.240 回答
0

肖恩·布莱特(Sean Bright)对如何实现它有正确的想法。

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

这是一篇解释模板化控件的好文章。

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

于 2009-07-14T16:53:24.030 回答