C# 如何从用户控件母版页内的内容页中找到标签控件?

C# 如何从用户控件母版页内的内容页中找到标签控件?,c#,asp.net,user-controls,master-pages,findcontrol,C#,Asp.net,User Controls,Master Pages,Findcontrol,我有一个页面:Abc.aspx 在这个Abc.aspx页面上,我使用了一个母版页Master1.master 现在在这个母版页上,我已经将一个usercontrol名称呈现为Usercontrol1.ascx。 在这个用户控件上,我放置了一个名为lbl1的标签 <asp:Label runat="server" ID="lbl1"></asp:Label> 这是我的主页: <%@ Master Language="C#" AutoEventWireup="tru

我有一个页面:Abc.aspx

在这个Abc.aspx页面上,我使用了一个母版页Master1.master

现在在这个母版页上,我已经将一个usercontrol名称呈现为Usercontrol1.ascx。

在这个用户控件上,我放置了一个名为lbl1的标签

 <asp:Label runat="server" ID="lbl1"></asp:Label>
这是我的主页:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Master1.Master.cs" Inherits="" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<asp:ContentPlaceHolder ID="head" runat="server"></asp:ContentPlaceHolder>
</head>

<body>
    <form runat="server">
   <div id="Load">
                    <uc2:UserControl1 ID="UserControl1 " runat="server" />
                    <asp:ContentPlaceHolder ID="cphMain" runat="server">
                    </asp:ContentPlaceHolder>
                </div>
 </form>
</body>
</html>

是否尝试先查找用户控件的父容器(例如#ParentContainer),然后在此对象上使用FindControl来查找所需的用户控件

见:

像这样:

UserControl control = this.Master.FindControl("ParentContainer").FindControl("lbl1") as UserControl; 

好的,经过一些研究,我发现他的答案是:

首先,我发现用户控件如下所示:

UserControl uch = Page.Master.FindControl("UserControl1 ") as UserControl;
在此之后,我从该用户控件中找到我的标签,如下所示:

if(uch!=null)
            {
                var data = (Label)uch.FindControl("lbl1");
                var d = data.Text; //getting text successfully
            }

最好的方法是在
母版页中为属性提供有意义的名称和类型
字符串
。此属性获取/设置
UserControl
中标签的文本

为了实现此目标,请在
UserControl
中提供一个具有相同含义的名称和类型
string
的属性。此属性获取/设置标签的文本

您必须将
this.Master
转换为
MasterPage
的实际类型,即
Master1
。然后可以访问此自定义属性

下面是您的
UserControl

public partial class UserControl1 : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    public string MeaningfulNameForLabelText
    {
        get { return this.lbl1.Text; }
        set { this.lbl1.Text = value; }
    } 
}
这是您的
母版页

public partial class Master1 : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    public string MeaningfulNameForLabelText
    {
        get { return this.UserControl1.MeaningfulNameForLabelText; }
        set { this.UserControl1.MeaningfulNameForLabelText = value; }
    } 
}
这是您的页面:

protected void Page_Load(object sender, EventArgs e)
{
    var master = this.Master as Master1;
    if (master != null)
    {
        master.MeaningfulNameForLabelText = "Hello";
    }
}

什么是ParentContainer??根据您更新的答案,我认为这将是UserControl的ID,可能您还需要先为ID为“Load”的div添加另一个FindControl。最好的方法是在
母版页中提供一个具有有意义的名称和类型
string
的属性。此属性获取/设置
UserControl
中标签的文本。为了实现此目标,请在
UserControl
中提供一个具有相同含义的名称和类型
string
的属性。此属性获取/设置标签的文本。您必须将
this.Master
转换为
MasterPage
的实际类型,即
Master1
。然后你可以访问这个自定义属性。好的,谢谢你,先生。我已经发布了答案。你能检查一下,让我知道我做的是对的还是错的吗?
protected void Page_Load(object sender, EventArgs e)
{
    var master = this.Master as Master1;
    if (master != null)
    {
        master.MeaningfulNameForLabelText = "Hello";
    }
}