2010-05-19 45 views
5

我想要做的就是從內容頁面的代碼隱藏中訪問<body>元素,併爲其添加類名稱。通過嵌套主頁從內容頁面訪問主體元素

我有一個頂級主頁,其中有<body>元素。然後我有一個嵌套的母版頁,它是內容頁面的母版頁。從內容頁面背後的代碼我想添加一個類名到body元素。就這樣。

我有這樣的頂級高手:

<body id="bodyNode" runat="server"> 

我已將此添加到代碼隱藏頁面內容:

Master.bodyNode.Attributes.add("class", "home-page"); 

我也得到一個消息:

System.Web.UI.MasterPage'不包含'bodyNode的定義

如果我添加此到ASPX頁面內容:

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

,該消息將會變爲:

bodyNode無法訪問由於其保護級別

請指教,我浪費了2小時,感覺像是應該很簡單的事情:(

回答

11

一旦你爲你的身體節點設置了runat =「server」,你就必須使用HTMLControls命名空間來訪問它。嘗試這個。

public void Page_Load(Object sender, EventArgs e) 
{ 
//Inject onload and unload 
HtmlGenericControl body = (HtmlGenericControl)Master.FindControl("bodyNode"); 
body.Attributes.Add("class", "home-page"); 
} 

編輯
你的問題是,你有嵌套母版頁。

由於「body」標籤位於頂級主頁面中,因此Master.FindControl()將無法​​正常工作,因爲它正在嵌套母版頁中查看。

你需要做的是使用Master.Master.FindControl(),或遞歸遍歷你的母版頁,往上直到Master.Master爲空(如,那麼你知道你是在頂層母版頁),然後調用上FindControl()

+0

您還可以設置一個公共屬性,讓您訪問身體,而無需剪切和粘貼此代碼在您的所有內容頁 – 2010-05-19 14:12:40

+0

謝謝,我添加了這個,但異常現在已更改爲: '你調用的對象是空的。'生成此行的行是'body.Attributes.Add(「class」,「home-page」);'雖然在實際文件中沒有用紅色下劃線表示問題..? – danwellman 2010-05-19 14:28:09

+0

這意味着「body」爲空。通過在它後面放置一個斷點來檢查上面的行是否正確找到它。你可能會發現它不是。 嘗試在即時模式下運行Master.FindControl(「bodyNode」)(一旦你點擊斷點)並查看它返回的內容,我將盡快測試並重新回答 – 2010-05-19 15:03:14

0

我會將一個公共屬性添加到母版頁後面的代碼中,該代碼將允許訪問屬於母版頁一部分的主體標籤。然後從內容頁面調用該屬性。

+0

這聽起來像它可以工作。不知道該怎麼做,雖然... – danwellman 2010-05-19 14:30:49