我正在使用ASP的createUserWizard控件来创建我的用户,我想添加一些额外的字段(带有关于用户的额外信息),我将这些字段保存在我自己的表中。
我尝试在后面的代码中使用findContol属性访问这些自定义文本框(因为它们在createUserWizard中)
问题是我声明并初始化为控件的textbox是空的。我是这样做的:
TextBox t_desc = (TextBox)(CreateUserWizard1.FindControl("txt_desc"));
o.organisation_description = t_desc.Text;下面是控件的嵌套方式:
<asp:CreateUserWizard ID="CreateUserWizard1" runat="server"
oncreateduser="CreateUserWizard1_CreatedUser">
<WizardSteps>
<asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server"
Title="Registreer uw organisatie">
<ContentTemplate>
<div class="row">
<div class="half">
<table>
<tr>
<td align="right">
<asp:Label ID="lbl_organisation_description" runat="server" AssociatedControlID="txt_desc">Beschrijf uw organisatie:</asp:Label>
</td>
<td>
<asp:TextBox ID="txt_desc" runat="server" ValidationGroup="CreateUserWizard1"></asp:TextBox>
</td>
</tr>
</table>
</div>
</div>
</ContentTemplate>
</asp:CreateUserWizardStep>
</WizardSteps>
</asp:CreateUserWizard>发布于 2012-12-13 22:16:29
CreateUserWizardStep step = (CreateUserWizardStep) CreateUserWizard1.FindControl("CreateUserWizardStep1");
if (step!=null)
{
TextBox txt = (TextBox)step.ContentTemplateContainer.FindControl("txt_desc");
}或者,如果您可以从server-code中查看步骤控制
TextBox txt = (TextBox)CreateUserWizardStep1.ContentTemplateContainer.FindControl("txt_desc");发布于 2012-12-13 22:18:59
FindControl只检查直接的子控件,它在您的CreateWizard1中是CreateUserWizardStep (使用runat=server)。一个简单的解决方法是使用递归算法:
public static class ControlExtensions
{
public static Control FindControlRecursive(this Control root, string id)
{
if (root.ID == id)
{
return root;
}
foreach (Control c in root.Controls)
{
Control t = c.FindControlRecursive(id);
if (t != null)
{
return t;
}
}
return null;
}
}将这个类添加到您的解决方案中将允许您使用control.FindControlRecursive("id")。
记住,如果你使用的是大页面,这可能意味着相当多的开销!
发布于 2012-12-13 22:12:41
我认为WizardStep是一个命名容器,所以你需要对它运行findcontrol。
就像这样
var step = CreateUserWizard1.CreateUserStep;
TextBox t_desc = (TextBox)(step.FindControl("txt_desc"));这是完全未经测试的代码,所以它可能无法工作,但我非常确定问题的根源是您在错误的父控件上运行FindControl。
https://stackoverflow.com/questions/13861442
复制相似问题