2012-12-06 98 views
1

我正在使用嵌套母版頁,我想從嵌套母版頁使用Label控件並更新其文本。但它不能訪問。當我刪除外部母版頁,然後它工作正常。以下是標記和代碼。無法訪問內容頁面中的嵌套母版頁的控制

OUTER MASTER

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="Roster.Site" %> 

嵌套母

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="RoasterMaster.master.cs" Inherits="Roster.RoasterMaster" MasterPageFile="~/Site.Master" %> 
<%@ MasterType VirtualPath ="~/Site.Master" %> 

內容頁

<%@ Page Language="C#" AutoEventWireup="true" Inherits="RequestsView" CodeBehind="ViewRequestsByPM.aspx.cs" MasterPageFile ="~/Roaster/RoasterMaster.Master" Title ="Roaster- View Requests by PM" %> 
<%@ MasterType VirtualPath ="~/Roaster/RoasterMaster.Master" %> 

內容頁CODE

protected void Page_Load(object sender, EventArgs e) 
{ 


    Label lblTitle = new Label(); 

    lblTitle =(Label)Master.FindControl("lblTitle"); 
    lblTitle.Text = "View Roaster Request"; 
} 

什麼與實施腳麻。請幫忙。謝謝

+1

你知道如何使用公共財產?這將是一個更好的方式來設置/獲取標籤值 – DavidB

+0

你必須通過使用master.master或page.master首先包含控件「lblTitle」 – CodeSpread

+0

找到特定的主頁頁面上有特定的標記' %@ MasterType VirtualPath =「...」%>' –

回答

2

可以在

嵌套母版頁中添加下面的代碼片段

public string PageTitle { get; set; } // In page_load 
lblTitle.Text = PageTitle; 

內容頁CODE

this.Master.PageTitle = "YOUR TEXT"; 

這會爲你工作...

1

假設您的標籤位於名冊主頁中,您可以簡單地添加方法來設置母版頁代碼中的文本。例如,

RoasterMaster.master.cs

public void SetTitle(string value) 
{ 
    this.lblTitle = value; 
} 

而且在內容頁代碼

Master.SetTitle("View Roaster Request"); 

在情況下,你的標籤外高手,那麼你可以在呼叫前相似從花名冊主代碼到外部主。

編輯
您的代碼不嵌套母案例場景工作,因爲母版頁的內容得到不同的命名容器頁UI層次結構中添加的。 FindControl方法不跨越多個命名容器,這是在這裏 - 由於嵌套,你有嵌套的命名容器。 Page.Master會爲您提供外部命名容器,但您的標籤可能位於內部命名容器中。其中一個方法是編寫自己的查找控件實現,它將在控件樹中重複出現,但實際上它沒有任何意義 - 我寧願使用上面的代碼,這樣更高效,更重要的是更易於維護。

相關問題