我在这里遇到了一个奇怪的问题。
在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中。
提前致谢
答案 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等来访问这些值。