2012-05-09 25 views
4

我想在內容頁的主頁中設置一個標籤,而不是使用FindControl。所以,在我宣佈的母版頁中:在主頁中找到控件

public partial class MainMasterPage : System.Web.UI.MasterPage 
{ 

    public string UserOfficeLabel 
    { 
     get { return lblUserOffice.Text; } 
     set { lblUserOffice.Text = value; } 
    } 
    public string OfficeLocationLabel 
    { 
     get { return lblOfficeLocation.Text; } 
     set { lblOfficeLocation.Text = value; } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    .... 
    } 
} 

「UserOfficeLabel」和「OfficeLocationLabel」是母版頁上的標籤。然後,在內容頁(的.aspx)我加了下面的指令下的「頁面」指令:

<%@ MasterType VirtualPath="~/Main/MainMasterPage.master" %> 

在conent頁面的代碼背後(cs文件),我試圖訪問/設置標籤:

Master.UserOfficeLabel = ... 

但UserOfficeLabel不適用於Master(VS智能感知不會將其列爲選項)。當我添加它時,它說「MainMasterPage.UserOfficeLabel無法訪問其保護級別」

+1

爲什麼你不想使用FindControl? –

+1

「我有一顆螺絲,我想把它擰成螺絲刀,但我不想用螺絲刀,請幫忙,不,我不會告訴你爲什麼。」 – asawyer

+0

從OO/Encapsulation的角度來看,使用FindControl是不好的,應儘可能避免。這類似於通過C++中的指針公開私有變量。我希望這回答了你的問題。 – NoBullMan

回答

0

我想你可以在這裏找到你要找的東西: http://odetocode.com/blogs/scott/archive/2005/07/16/mastertype-in-asp-net-2-0.aspx。 從理論上講,當你編譯你應該看到下面的代碼部分類

Public Shadows ReadOnly Property Master() As otc 
    Get 
     Return CType(MyBase.Master,otcMaster) 
    End Get 
End Property 

我已經做了一些像你通過聲明一個變量

Dim LocalMasterPageRef As MyMasterPageName 
LocalMasterPageRef = CType(Me.Master, MyMasterPageName) 
... 
LocalMasterPageRef.xxxx 

希望它可以幫助想裏面。

+0

謝謝胡安。當我跟蹤代碼時,它似乎在主頁面上獲得了正確的標籤並正確設置了其文本,但除非刷新頁面,否則頁面上的標籤不會更改。 – NoBullMan

+0

主頁面標籤的更改發生在內容頁面的下拉列表中SelectedIndexChanged事件hanlder和此下拉列表(以及一堆其他控件)位於Ajax更新面板內。不知道這是否有所作爲。 – NoBullMan

+0

不知道是怎麼回事... 1)我不明白母版頁上的處理程序事件與需要從子窗口更改標籤之間的連接是什麼2)我會看看Ajax更新面板,我認爲我已經閱讀過幾次與該組件有關的問題。祝你好運 – 2012-05-10 14:29:12