LoginView中的RoleGroup中的FindControl

我似乎无法在登录视图中找到控件。

aspx是:

    

而背后的代码是:

 if (Context.User.IsInRole("SuperUser")) { CheckBox active = (CheckBox) SuperUserLV.FindControl("Active"); if (active != null) { active.Checked = this.databaseObject.Active; } CheckBox require = (CheckBox) SuperUserLV.FindControl("RequireValidaton"); if (require != null) { require.Checked = this.databaseObject.RequiresValidation; } } 

如果用户处于正确的角色,我可以看到复选框,但后面的代码没有填充它们,findcontrol的结果为null。

我错过了什么? 谢谢。

编辑 :看起来我的问题是当我在做.FindControl ,loginview没有渲染到屏幕并返回null。 将我的代码放在一个按钮上,并在页面呈现到屏幕后调用它,它正如我所期望的那样工作。

编辑2 :似乎放置代码的最佳位置是SuperUserLV_ViewChanged

内置的FindControl方法仅搜索直接子控件。 您需要编写该方法的递归版本来搜索所有后代。 以下是一个未经测试的示例,可能需要进行一些优化:

 public Control RecursiveFindControl(Control parent, string idToFind) { for each (Control child in parent.ChildControls) { if (child.ID == idToFind) { return child; } else { Control control = RecursiveFindControl(child, idToFind); if (control != null) { return control; } } } return null; }