2010-03-07 139 views
1

我正在使用SharePoint Server 2007 + C#+ .Net 3.5 + VSTS 2008 + ASP.Net。我正在使用協作門戶模板。ASP.NET/SharePoint母版頁問題

我正在開發一個自定義的aspx頁面,並將其放在網站的_layout文件夾中,我想將SharePoint網站的default.master應用於此aspx頁面。任何關於如何實現這一目標的樣本?

回答

1

您可以在PreInit事件中放置代碼,使您的自定義頁面使用當前網站的母版頁。

protected override void OnPreInit(EventArgs e) 
{ 
base.OnPreInit(e); 
SPWeb myWeb = SPControl.GetContextSite(Context).OpenWeb(); 
string strUrl = myWeb.ServerRelativeUrl + "/_catalogs/masterpage/my.master"; 
this.MasterPageFile = strUrl; 
} 

或者用default.master替換my.master以便使用默認母版頁。或者檢查spweb的MasterUrl屬性並使用它。

無論哪種方式,它應該讓你朝着正確的方向前進。

+0

當我使用您的代碼時,顯示SharePoint未知錯誤頁面。 – George2 2010-03-08 04:10:24

+0

如果您使用: SPWeb myWeb = SPControl.GetContextWeb(Context); – 2010-03-11 14:53:08

1

如果您使用SharePoint Designer,則可以右鍵單擊您的頁面,然後選擇要應用的母版頁。

+0

我已使用SharePoint Designer打開該網站。我將頁面放在_layout文件夾中,但SharePpoint設計器左上角文件夾列表中沒有_layout文件夾。任何想法有什麼不對? – George2 2010-03-08 04:17:09

+0

右鍵單擊頁面後,如何選擇其母版頁面? – George2 2010-03-08 04:20:23

1

做到這一點的最好方法是使用HttpModule。這樣就可以在所有應用程序頁面(即LAYOUTS文件夾中的頁面)上使用自定義主頁面。它可以使用一個功能部署,並可以激活每個Web應用程序(看到httpmodule需要在web.config中註冊它是Web應用程序的範圍。)

通過使它的Web應用範圍,您的最終用戶將擁有統一的用戶體驗,而不是單個頁面看起來像網站的前端,而所有其他(開箱即用)應用程序頁面仍然使用默認的sharepoint application.master。

有關代碼示例和深入的解釋更,看here

P.S.由於缺少內容佔位符,您正在使用上面的代碼獲取錯誤。您需要創建自定義母版頁的副本。雖然樣式可以相同,但應用程序頁面比前端主頁面使用更多/其他ContentPlaceHolders。

只需複製您的自定義母版頁,將其從CustomMaster.master重命名爲CustomMasterEdit.master,然後將其用於應用程序頁面樣式,SharePoint將向您發出錯誤信息,告訴您哪些佔位符缺失,並持續添加所需的佔位符該網頁的作品(我相信有2或3個額外的佔位符)。

P.P.S.爲了使共享點顯示有意義的錯誤,請轉至web.config並查找<SharePoint>標記並將callstack屬性從false更改爲true。然後,查找customErrors標記並將mode屬性設置爲"off"。要完全啓用調試,您還可以啓用ASP.NET跟蹤。當然,你不應該做這在生產環境....

更多信息如何修改web.config中改善SharePoint顯示真正的錯誤信息,可以發現here

+0

感謝您的意見。 – George2 2010-03-08 12:17:52