首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找控件属性在createUserWizard中不起作用

查找控件属性在createUserWizard中不起作用
EN

Stack Overflow用户
提问于 2012-12-13 22:02:30
回答 5查看 3.3K关注 0票数 2

我正在使用ASP的createUserWizard控件来创建我的用户,我想添加一些额外的字段(带有关于用户的额外信息),我将这些字段保存在我自己的表中。

我尝试在后面的代码中使用findContol属性访问这些自定义文本框(因为它们在createUserWizard中)

问题是我声明并初始化为控件的textbox是空的。我是这样做的:

代码语言:javascript
复制
TextBox t_desc = (TextBox)(CreateUserWizard1.FindControl("txt_desc")); 
o.organisation_description = t_desc.Text;

下面是控件的嵌套方式:

代码语言:javascript
复制
<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>
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-13 22:16:29

代码语言:javascript
复制
 CreateUserWizardStep step =   (CreateUserWizardStep)  CreateUserWizard1.FindControl("CreateUserWizardStep1"); 
 if (step!=null)
 {
     TextBox txt =  (TextBox)step.ContentTemplateContainer.FindControl("txt_desc");
 }

或者,如果您可以从server-code中查看步骤控制

代码语言:javascript
复制
TextBox txt =  (TextBox)CreateUserWizardStep1.ContentTemplateContainer.FindControl("txt_desc");
票数 6
EN

Stack Overflow用户

发布于 2012-12-13 22:18:59

FindControl只检查直接的子控件,它在您的CreateWizard1中是CreateUserWizardStep (使用runat=server)。一个简单的解决方法是使用递归算法:

代码语言:javascript
复制
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")。

记住,如果你使用的是大页面,这可能意味着相当多的开销!

票数 1
EN

Stack Overflow用户

发布于 2012-12-13 22:12:41

我认为WizardStep是一个命名容器,所以你需要对它运行findcontrol。

就像这样

代码语言:javascript
复制
var step = CreateUserWizard1.CreateUserStep;
TextBox t_desc = (TextBox)(step.FindControl("txt_desc"));

这是完全未经测试的代码,所以它可能无法工作,但我非常确定问题的根源是您在错误的父控件上运行FindControl。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13861442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档