2010-10-21 22 views
4

我在LoginView的RoleGroup中有一些文本框和复选框。我如何在代码隐藏中访问这些控件?在LoginView的RoleGroup中查找控件

<asp:LoginView ID="lgvAdmin" runat="server"> 
     <RoleGroups> 
      <asp:RoleGroup Roles="Administrator"> 
       <ContentTemplate> 
        <div class="floatL"> 
         <h1>Administrator Settings</h1> 
         <asp:CheckBox ID="chkActive" Text="Is Active" Checked="false" runat="server" /><br />      
         <asp:CheckBox ID="chkIsRep" Text="Is Representative" Checked="false" runat="server" /> 
         <br /><br /> 
         <strong>User Permissions</strong><br /> 
         <asp:RadioButtonList ID="RadioButtonList1" runat="server" RepeatDirection="Horizontal" RepeatColumns="3" Width="200" Font-Bold="true"> 
          <asp:ListItem Value="User" Selected="True">User</asp:ListItem> 
          <asp:ListItem Value="Administrator">Administrator</asp:ListItem> 
         </asp:RadioButtonList><br /><br /> 
        <strong>Assigned to Rep</strong><br /> 
        <asp:DropDownList ID="DDLRep" CssClass="ddlStyle" Width="165" runat="server" /> 
       </div> 
      </ContentTemplate> 
     </asp:RoleGroup> 
    </RoleGroups> 
</asp:LoginView> 

我知道我需要使用FindControl方法,我也知道这是不是只是lgbvAdmin.FindControl(“chkIsRep”),因为这里的控制是层次结构。

所以,它应该是这样的,lgvAdmin.controls [0] .FindControl(“chkIsRep”);

如何找到访问我的控件的确切路径?

回答

2

我知道这是一个老的文章,但这里是如何做到这一点的其他人谁需要回答一个简单的例子:

ITemplate template = lgvAdmin.RoleGroups[0].ContentTemplate; 
if (template != null) 
{ 
    Control container = new Control(); 
    template.InstantiateIn(container); 

    foreach (Control c in container.Controls) 
    { 
     if (c is CheckBox) 
     { 
      //Do work on checkbox 
     } 
    } 
} 
+0

+1了正确的轨道!或者,'ITemplate template = lgvAdmin.RoleGroups [0] .ContentTemplate.InstantiateIn(container)'将其缩小一点。如果您不知道要搜索的角色,请使用LoginView.RoleGroups来查找它们。如果您知道子控件的索引,在将ContentTemplate实例化为控件容器后,您也可以像访问它一样来避免循环容器中的每个控件。 'CheckBox chk =(CheckBox)container.Controls [1];' – clamchoda 2012-04-12 16:05:33