我在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”);
如何找到访问我控件的确切路径?
答案 0 :(得分: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
}
}
}
答案 1 :(得分:0)
如果请求未通过身份验证,则角色组模板将不适用于该页面,并且如果存在如下所示的块,则无法在该页面找到要使用的角色
if(Request.IsAuthenticated)
{
CheckBox chkactive=(CheckBox)lgvAdmin.FindControl("chkActive");
chkavtive.Checked=true;
}