2012-05-16 42 views
1

我的母版页包含此:无法在内容占位访问标签在母版页

<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 
    <asp:Label ID="User" runat="server" Text="Welcome, " Visible="false"></asp:Label> 
</asp:ContentPlaceHolder> 

我试图访问这样的标签:

Label welcomeLabel; 
ContentPlaceHolder cPlaceHolder;    

cPlaceHolder = (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1"); 

if (cPlaceHolder != null) 
{ 
    welcomeLabel = (Label)cPlaceHolder.FindControl("User"); 
    if (welcomeLabel != null) 
    { 
     welcomeLabel.Text = "Welcome, " + u.Name; 
     welcomeLabel.Visible = true; 
    } 
} 

我检查该ContentPlaceHolder1实际上是找到并使用HasControls()它返回true,但我似乎无法访问标签。

帮帮我吗?

+0

尝试找到this.Master.FindControl(“User”);并看看它是否来临 –

+0

你打电话给你的代码的时刻?此外,我的代码是否运行在另一个contentplaceholder中嵌入的页面的上下文中?我可以告诉你,你的代码在这里工作。 – platon

+0

@platon - 此代码在页面加载时运行。当我在实际页面上放置id = user的标签时,这个代码被调用,但是我对master页面的理解是,我不应该那样做。 – Jackass

回答

2

我也有同样的问题。

我所做的是

MasterPage ctl00 = FindControl("ctl00") as MasterPage; 
ContentPlaceHolder cplacehld = ctl00.FindControl("ContentPlaceHolder1") as ContentPlaceHolder; 
       Label label1= cplacehld.FindControl("User") as Label; 
0

尝试:

((Label)this.Page.Master.FindControl("User")).Text = "Welcome, " + u.Name; 
((Label)this.Page.Master.FindControl("User")).Visible = true; 
0

这个问题困扰我了大约两个小时,直到我意识到,如果我有一个ASP:内容标签我的网页上contentplaceholderID设置为母版页中contentplaceholder的ID,我永远无法访问contenplacholder中的任何控件。即使内容页面上的asp:Content标签为空,asp:Content页面也始终与MasterPage内容合并。为了提供默认内容,我将标签移至contentplaceholder标记之外,并将可见性设置为false。如果我然后动态地确定我没有任何内容用于我的asp:Content标签,那么我只需将标签可见性设置为true即可显示我的默认内容。不完全优雅,但它的作品。

相关问题