MS.Tech - ???????

.NET & 微软企业服务器 & 前沿技术和产品
随笔 - 92, 评论 - 1040, 引用 - 87

导航

关于

所有内容和观点仅代表个人观点,如有问题和建议请发Email给我。

标签

每月存档

最新留言

广告

 

在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 源代码

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.”的错误异常。通过这个异常信息也就知道,其实我们要做的就是允许在Page Server Code能被顺利编译执行

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中被执行的。可以看到CompilationMode="Always"就意味着这个操作是属于“不得已而为之”的了,但这类不得已的场景现实应用中毕竟还是存在的。下面发散思维,扩展下思路。

5、我们把SharePoint的一些接口也写在这个普通ASP.NET Page里,从这个ASP.NET Page去操作SharePoint的库表等相关信息。点击此处查看 HelloSharePoint.aspx源代码

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各类库表数据。可以看到多了一个IncludeSubFolders="false"的配置,如果为true则表示包括子文件夹在内所有页面每次都要编译运行。通过这个例子说明,我们甚至可以把这个普通的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" %>

最后,我在说上述异常错误时说“我们要做的就是允许在Page Server Code能被顺利编译执行”,那么对于Basic Page,WebPart Page等MOSS自己的Page,是否也可以在内部增加Server Code,然后配置PageParserPath来运行这些Server Code呢?答案是肯定的。

希望你的项目设计中尽量少考虑这个特性,但如果必须用,希望本文对你有所帮助。

打印 | 张贴于 2007-03-17 02:13:00 | Tag:微软企业服务器

留言反馈

#回复: 在MOSS中直接嵌入ASP.NET Page 编辑
折腾了半天,终于找到了,谢谢
2007-04-13 14:26:00 | [匿名用户:Taurus]
#回复: 在MOSS中直接嵌入ASP.NET Page 编辑
不推荐??
我能看到不少好处。坏处只发现一个,源码会被SPD打开。如果解决了这个。用途广泛。
2007-03-30 11:33:00 | [匿名用户:by1455]
#回复: 在MOSS中直接嵌入ASP.NET Page 编辑
分析的不错
2007-03-26 11:53:00 | [匿名用户:firefox]
#回复: 在MOSS中直接嵌入ASP.NET Page 编辑
你的文章很棒! 多努力!加油!加油!
2007-03-23 11:38:00 | [匿名用户:vvzsy]
#回复: 在MOSS中直接嵌入ASP.NET Page 编辑
你的文章很棒! 多努力!
2007-03-23 00:24:00 | [匿名用户:CK]
#回复: 在MOSS中直接嵌入ASP.NET Page 编辑
如果ASPX带后台代码的话,DLL拷贝到BIN下就可以了吗?
2007-03-20 15:16:00 | [匿名用户:天然椰汁]
#回复: 在MOSS中直接嵌入ASP.NET Page 编辑
诚如LZ所言,确实不推荐。
2007-03-20 14:05:00 | [匿名用户:kaneboy]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.1.8