在MOSS中直接嵌入ASP.NET Page

        在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开始。

<%@ 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>

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的库表等相关信息。

<%@ 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各类库表数据。可以看到多了一个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呢?答案是肯定的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值