在MOSS Document Library中的Page,有Basic Page和WebPart Page两种,前者更多的体现WCM特性,后者则更侧重体现Portal特性。
不管是Basic Page还是WebPart Page,都是直接和MOSS本身结合非常密切,都直接采用Site中的MasterPage。如果我们想把一个普通的ASP.NET Page也加到MOSS站点里运行,比如也放在Document Library里,或者放在SIte某个文件夹下面,然后通过MOSS站点URL直接访问运行该ASP.NET Page,就需要做一些工作了。这里就准备介绍这么一个Tip来完成这件事。我想,这种应用方式主要是针对一些需要特殊页面效果,或者追求短平快的小量自定义的场景的,也不失为各类复杂应用场景提供一个可以方便Work Around的通道。
1、首先从最简单的Hello World Page开始。点击此处查看 HelloWorld.aspx 源代码。
<%@ Page Language="C#" %>
<html>
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Hello World Page</title>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Hello World!");
}
</script>
</head>
<body>
<form id="form1" runat="server">
</form>
</body>
</html>
2、将HelloWorld.aspx上传到Documents文档库中。此时,你直接点击文档库中的HelloWorld.aspx进行浏览,其URL类似http://localhost/Documents/HelloWorld.aspx,将出现“An error occurred during the processing of /Documents/helloworld.aspx. Code blocks are not allowed in this file.”的错误异常。
3、修改MOSS Site的web.config,比如C:\Inetpub\wwwroot\wss\VirtualDirectories\80\web.config。找到PageParserPaths这么一个节点,修改如下:
<PageParserPaths>
<PageParserPath VirtualPath="/Documents/helloworld.aspx" CompilationMode="Always" AllowServerSideScript="true" />
</PageParserPaths>
4、重新浏览http://localhost/Documents/helloworld.aspx,页面正常被编译执行。
至此已经验证普通的ASP.NET Page是可以顺利集成在MOSS中被执行的。下面发散思维,扩展下思路。
5、我们把SharePoint的一些接口也写在这个普通ASP.NET Page里,从这个ASP.NET Page去操作SharePoint的库表等相关信息。点击此处查看 HelloSharePoint.aspx源代码。
<%@ Page Language="C#" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Import Namespace="Microsoft.SharePoint.WebControls" %>
<html>
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Hello SharePoint</title>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Hello SharePoint!<br/>");
}
protected void Button1_Click(object sender, EventArgs e)
{
try
{
string url = "http://localhost"
string listName = "Documents"
SPWeb web = new SPSite(url).OpenWeb();
SPListItemCollection listItems = web.Lists[listName].Items;
foreach (SPListItem item in listItems)
{
Response.Write(item["Name"].ToString() + "<br/>");
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:Button runat="server" Text="GetItems" ID="Button1" OnClick="Button1_Click" />
</form>
</body>
</html>
6、将 HelloSharePoint.aspx上传到Documents文档库中。修改Web.config的PageParserPaths节点如下。表示Documents文档下所有页面都允许服务器端脚本并进行编译运行。
<PageParserPaths>
<PageParserPath VirtualPath="/Documents/*" CompilationMode="Always" AllowServerSideScript="true" IncludeSubFolders="false" />
</PageParserPaths>
7、浏览http://localhost/Documents/HelloSharePoint.aspx,点击GetItems按钮,正常获取到Documents文档库下所有Item的Name列表。
至此说明在被嵌入的ASP.NET Page可以利用SharePoint API操作SharePoint各类库表数据。因此,我们甚至可以把这个普通的ASP.NET Page页做得和所在Site的页面风格一致,这样就达到瞒天过海了,在该ASP.NET Page内的操作感觉就如同在同一个MOSS Site中操作一般。
8、再延伸下思路。可以尝试把一些复杂业务逻辑操作封装在Assembly中,然后再在ASP.NET Page里调用即可。有兴趣者自己可以尝试这块操作。主要在ASP.NET Page中加入类似声明:
<%@ Register Tagprefix="MyAssembly" Namespace="ClassLibrary1" Assembly="ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=671d8e00903f3760" %>
希望对你有所帮助。

>>
Source Link>>Blog:
joycode>>Publish Date: 3/17/2007 8:01:31 AM
>>Keywords: page asp.net
Related Posts>>ASP.NET AJAX 1.0资源连接以及对一些常见问题的答复 # 【原文地址】Links to ASP.NET AJAX 1.0 resources, and answers to some common questions 【原文发表日期】 Thursday, January 25, 2007 12:53 AM 下面是几个ASP.NET AJAX 1.0资源的连接以及对我看到的跟ASP.NET AJAX 1.0产品发布有关的几个常见问题的答复: 精彩的免费资
>>ASP.NET中cache控制的方法 # 如果你不想让客户端缓存(cache)你服务器上的网页的话,在ASP.NET中可以这样控制: 在Page_Load中写: Response.Cache.SetCacheability(HttpCacheability.NoCache); 我在测试的时候发现一些有趣的东西: 按HTTP 1.0的标准,你可以在html网页上直接使用 <meta http-equiv="pragma" conten
>>ASP.NET 2.0 技巧和诀窍以及ASP.NET, IIS7 和ASP.NET AJAX End to End 讲座 # 【原文地址】 ASP.NET 2.0 Tips and Tricks and ASP.NET, IIS7 and ASP.NET AJAX End to End Talks 【原文发表日期】 Monday, February 05, 2007 4:49 PM 我结束了我旋风般的欧洲讲座之旅(在不到一个星期内横跨比利时,英国和荷兰),非常幸运有机会沿途给几百位朋友做讲座。在此特向跑来参与我讲座的各
>>也说UrlRewriter # UrlRewriter是我们现在做博客系统基本上必用的功能,除了对搜索引擎友好外,人也比较容易记,看着也舒服。关于UrlRewriter的文章其实也是非常多,由于有网友提出想了解肥猫博客使用的UrlRewriter技术,因此这里主要针对在肥猫博客中使用的UrlRewriter技术做一个介绍。这个实现主要是针对ASP.NET 1.1体系的,可能你要说ASP.NET 2.0都出来了,还要谈1.1,可是
>>ASP.NET AJAX 1.0“我怎么做?”免费录像(更新至最终版) # 【原文地址】Free ASP.NET AJAX 1.0 "How Do I?" Videos (Updated for Final Release) 【原文发表日期】 Monday, February 12, 2007 11:08 PM ASP.NET 开发队的 Joe Stagner 过去的几个星期很忙,刚完成更新他的23个ASP.NET AJAX 1.0“我怎么做?”免费录像至ASP.NET
>>ASP.NET AJAX 1.0 发布了 # 【原文地址】 ASP.NET AJAX 1.0 Released 【原文发表日期】 Tuesday, January 23, 2007 10:52 AM 我非常兴奋地宣布,ASP.NET AJAX 1.0(即Atlas)的最终版已于今天早晨发布了,你可以在这里下载。 ASP.NET AJAX 1.0 ASP.NET AJAX 1.0提供了一个丰富的客户端AJAX库,该库对核心JavaScript
>>Scott Guthrie射击甜圈列兵的录像(以及一些好的ASP.NET AJAX链接) # 【原文地址】Video of Scott Guthrie Shooting Private Donut (and some good ASP.NET AJAX links) 【原文发表日期】 Monday, March 05, 2007 11:09 PM 偶尔地,作为我工作的一部分,我有机会做些酷酷的非传统的事情。2个星期前,我在由Rooster Teeth制作的“红方(Red)”对“蓝方(Bl
>>在CodeMash上作的ASP.NET 技巧和诀窍和LINQ讲座的讲义和演示代码 # 【原文地址】 ASP.NET Tips and Tricks and LINQ Slides/Demos from CodeMash 【原文发表日期】 Sunday, January 21, 2007 7:39 PM 下面是上星期五我在CodeMash大会上作的两个讲座的讲义和演示代码: ASP.NET 2.0 技巧和诀窍 这个讲座涉及ASP.NET UI,AJAX,缓存和部署技巧/诀窍,以及
>>ASP.NET AJAX的好东东:文档下载,后退按钮支持,新的动画控件 # 【原文地址】ASP.NET AJAX Goodies: Documentation Download, Back Button Support, New Animation Control 【原文发表日期】 Tuesday, February 06, 2007 12:45 AM 发个简短的帖子,特地说一下过去几天内刚发布的几个与 ASP.NET AJAX 1.0 相关的酷下载: ASP.NET A
>>ASP.NET AJAX 1.0 源码发布了 # 【原文地址】 ASP.NET AJAX 1.0 Source Code Released 【原文发表日期】 Tuesday, January 30, 2007 10:41 AM 就象上个星期ASP.NET AJAX 1.0 发布时我提到的那样,我们公布了ASP.NET AJAX 产品的全部源码。这包括服务器端ASP.NET集成的源码(包括UpdatePanel,UpdateProgress,和Sc