如何从用户控件母版页内的内容页面查找标签控件?

时间:2016-02-05 09:28:04

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

我有一页: Abc.aspx

Abc.aspx 页面上,我使用了一个 Master1.Master 的母版页。

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

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

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

所以现在在Abc.aspx页面的页面加载事件中我想找到这个控件,我试过但是得到了null:

 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>

3 个答案:

答案 0 :(得分:1)

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

请参阅:Find a control on a page with a master page

像这样:

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

答案 1 :(得分:1)

最好的方法是在//Set show separator [objTableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLine]; //Set separator color objTableView.separatorColor = [UIColor blackColor]; 中为属性提供有意义的名称并输入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; }
    } 
}

答案 2 :(得分:0)

经过一些研究后我发现他回答:

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

UserControl uch = Page.Master.FindControl("UserControl1 ") as UserControl;

在此之后我从这个用户控件中找到我的标签:

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