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

标签 c# asp.net user-controls master-pages findcontrol

我有一个页面:Abc.aspx

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

现在在这个母版页上,我将 1 个用户控件名称呈现为 Usercontrol1.ascx。

在此用户控件上,我放置了 1 个名为 lbl1 的标签。

 <asp:Label runat="server" ID="lbl1"></asp:Label>

所以现在在 Abc.aspx 页面的页面加载事件上我想找到这个控件并且我已经尝试过但是得到空值:

 protected void Page_Load(object sender, EventArgs e)
        {
            var lbl = ((Label)this.Master.FindControl("lbl1")); // null here
            ((Label)this.Page.Master.FindControl("lbl1")).Text = "Hello"; //error here:object reference not set to instance of object
        }

这是我的母版页:

<%@ 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>

最佳答案

最好的方法是在您的 MasterPage 中提供一个具有有意义的名称和类型的属性 string。此属性获取/设置 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; }
    } 
}

这是你的MasterPage

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";
    }
}

关于c# - 如何从用户控件母版页内的内容页中找到标签控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35220489/

相关文章:

c# - PackageIcon 和 PackageIconUrl 都不能在 dotnet build 中工作

c# - Windows 上的 MySQL 在连接尝试时崩溃

c# - LinqToSql - 从嵌套列表中获取不同 ID 的列表

c# - 如何在不使用 Session 的情况下在 ASP.net 中跨页面传递值

c# - ASP.NET - 如何从 Swagger Restful API 生成代理类

c# - WPF 用户控件库中的打包字符串

c# - 为什么我的自定义控件的文本属性不会显示在“属性”窗口中?

c# - Parallel.ForEach 中的 SQL 查询 - 死锁

c# - 在哪里可以找到 IIS 管理器连接字符串的位置

WPF 用户控件单击