C# 从母版页访问用户控件

C# 从母版页访问用户控件,c#,asp.net,C#,Asp.net,在角色组下的登录视图下,我的母版页中有一个用户控件。这是该控件。它不在内容占位符中。但是,如果我尝试访问它,则会得到空结果。如何从隐藏的页面代码访问该控件。从母版页获取它时遇到问题 <asp:RoleGroup Roles="Students"> <ContentTemplate> <uc1:studentsPanel runat="server" ID="studentcont

在角色组下的登录视图下,我的母版页中有一个用户控件。这是该控件。它不在内容占位符中。但是,如果我尝试访问它,则会得到空结果。如何从隐藏的页面代码访问该控件。从母版页获取它时遇到问题

<asp:RoleGroup Roles="Students">
                    <ContentTemplate>
                        <uc1:studentsPanel runat="server" ID="studentcontrol" />
                    </ContentTemplate>
                     </asp:RoleGroup>

我们看不到全部代码,但您的代码片段似乎是正确的。首先尝试不要将控件强制转换为LoginView-原因可能是您的面板不是该类型。若要尝试是否找到控件,请使用

if(Page.Master.FindControl("studentcontrol") != null) {
    Label1.Text = "found";
}
在添加另一个可能的故障源之前

还有两个更明确的答案不需要在这里重复。你会发现奇妙的解释和解释。

正如@krishnaj所说

我不知道studentsPanel UserControl中的哪个控件,但我假设该标签是。你应该这样访问

var Loginview = (Master.FindControl("LoginView1") as LoginView);
Control cont = new Control();
Loginview.RoleGroups[0].ContentTemplate.InstantiateIn(cont);
(cont.Controls[1].FindControl("_trylbl") as Label).Text = "Hello say";

下面是我用来访问母版页中控件的代码

    //Master page from user control
    LoginControl control

    Page page = (Page)this.Page;
    MasterPage master = (MasterPage)page.Master;

    control= (LoginControl )master.FindControl("studentcontrol");

    if (control!= null)
    {
        Label1.Text = "found";
    }

在什么情况下,您试图访问此功能?我认为
Page.Master.FindControl
不是一个好办法。我可能错了,但您是否尝试了
页面。FindControl
?我在页面加载时使用它。find control也返回null。您好,studentsPanel是我的用户控件您好,这意味着我的内容模板中应该有一个标签?不,只有一个示例。你可以放置任何控件。已经使用过此代码,但我一直得到null
LoginView控件;Page Page=(Page)this.Page;母版页母版=(母版页)page.master;控件=(LoginView)master.FindControl(“StudentsPanel”);如果(control!=null){Label1.Text=“found”}
如果您观看主机,是否看到您的contenttemplate是。我可以看到contenttemplate您是否看到contenttemplate中的标签,如果是,请更改find control的部分,要查看内容模板而不是标题,我的内容模板没有使用标签。我正在使用的标签位于我的页面上。这可能是原因吗?
    //Master page from user control
    LoginControl control

    Page page = (Page)this.Page;
    MasterPage master = (MasterPage)page.Master;

    control= (LoginControl )master.FindControl("studentcontrol");

    if (control!= null)
    {
        Label1.Text = "found";
    }