我是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首先总是空出来)。
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");
非常感谢帮助,谢谢!
答案 0 :(得分: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");
答案 1 :(得分:1)
试试这段代码:
TextBox first = (TextBox) RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("firstName");