大概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在这个页面,这两个问题时可以解决的,
会在下回的文章中写如何解决他们。