大概2年前剛剛接觸sharepoint開發的時候,由於不熟悉,總想套用asp.net的頁面開發,
現在總結一下如何自定義sharepoint頁面開發。
首先明確sharepoint的頁面類型(參照msdn)
1 母板頁,就是決定整個site風格的頁面,默認情況下是這個文件
C:/Program Files/Common Files/Microsoft Shared/web server extensions/12/TEMPLATE/GLOBAL/default.master
2 應用程序頁/_layout頁,這些頁面時存在IIS虛擬目錄中的,也就是說物理存在的,默認情況下存在於
C:/Program Files/Common Files/Microsoft Shared/web server extensions/12/TEMPLATE/LAYOUTS文件夾下,
通常我們不會改動這些頁面,他們不能添加web部件。
3 內容頁面, 指的就是通常可以承載webpart的頁面,這種頁面可以用sharepoint designer修改和查看,
默認沒有被spd修改,分成2個部分存儲,一部分在前端的web服務器,另一部分在sharepoint內容數據庫中,
用spd修改後,就存儲在sharepoint數據庫中,區別我就不說了。
明確了3種類型後,就可以開發了。
(1) 用spd開發含有代碼的內容頁面,在spd中創建一個頁面,並且加入如下代碼
<script type="text/c#" runat="server">
protected void Page_Load(object sender, EventArgs e)
{
this.Response.Write("Hello World!");
}
</script>
右鍵在瀏覽器中預覽,會出現異常
這是因爲sharepoint做了安全限制,默認是不允許添加後臺代碼的。
但是我們可以通過修改webconfig文件,讓它正常運行。
<PageParserPaths>
<PageParserPath VirtualPath="/Dalian/custompage1.aspx" CompilationMode="Always" AllowServerSideScript="true" />
</PageParserPaths>
雖然通過這種方法我們可以寫入服務器端代碼,但是不推薦這樣做
原因是這樣相當於變相的提升了某些用戶的權限,只要可以通過spd
訪問這個頁面,就可以編寫服務器代碼了,安全性降低了。
(2)自定義應用程序頁面,這種頁面和我們平時開發的asp.net頁面,這種頁面可以部署
在LAYOUTS文件夾或者虛擬目錄下(我沒有試過),我喜歡用Feature來部署。
第一步 創建一個asp.net工程,會得到一個aspx文件和一個dll文件(不用codebehind就不用dll了)
添加個簡單的代碼
protected void Page_Load(object sender, EventArgs e)
{
this.Response.Write("Hello World!");
}
第二步 部署,創建一個Feature, 一個文件夾“CusPage”在...12/TEMPLATE/FEATURES/下並且包含2個xml文件
Feature.xml如下:
<Feature
Id="274FC071-C858-4cd2-A602-61D2275A9139"
Title="Customize Page"
Description="Customize Page ..."
Scope="Web"
Hidden="FALSE"
xmlns="http://schemas.microsoft.com/sharepoint/" >
<ElementManifests >
<ElementManifest Location="Elements.xml"/>
</ElementManifests>
</Feature>
Elements.xml如下:
<Elements xmlns="http://schemas.microsoft.com/sharepoint/" >
<Module Name="CustomizePage" >
<File Url ="CustomPage1.aspx" Type="Ghostable" IgnoreIfAlreadyExists ="TRUE" />
</Module>
</Elements>
把第一步中的aspx文件也放到這個目錄下, 把dll文件放到對應sharepoint網站的bin目錄下
打開命令行執行
在網站設定中,啓用這個feature
結果
這樣就OK了,並且打開spd會看到這個頁面, 但是看到頁面我們就會意識到問題了,這個頁面和我們sharepoint頁面
風格不一致,而且我們可能還要使用webpart在這個頁面,這兩個問題時可以解決的,
會在下回的文章中寫如何解決他們。