2010-03-07 103 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