本文中,我将跟大家一起讨论,为MOSS的页面添加服务器端代码的另一种方式。不过首先要声明,这种方式仅作为技术研究,如要使用,请慎重!
在上一篇文章中,我们讨论过如何为MOSS页面添加服务端后台代码,详见(
为MOSS页面添加后台代码的两种方式(一) ),这种方式是通过将代码生成为一个DLL,然后与对应的页面进行绑定,类似于ASP.NET中的Code-Behind,而我们知道,在用ASP.NET进行开发的时候,可以通过在页面上添加<script runat=”server”></script>直接使用服务器端代码,那在MOSS页面中可不可以呢?既然是基于ASP.NET 2.0,那就没什么问题。偶然在一老外的博客上看到了一篇介绍如何在MOSS页面上使用<script runat=”server”></script>代码块,详见:SharePoint 2007: using ASP.NET server side code in your pages,那我们就可以发挥一下,比如写一个page_load,给button托管一个Click事件等等,下面就来详细介绍。
我们知道,直接在MOSS页面上添加<script runat=”server”></script>代码块,会提示我们”处理XXXX时出现错误。此文件中不允许使用代码块”。怎么办呢?我们来修改一下web.config,在<PageParserPaths></PageParserPaths>中添加一行(默认这个节点中没有内容):
<PageParserPath VirtualPath="/_catalogs/masterpage/*" CompilationMode="Always" AllowServerSideScript="true" IncludeSubFolders="true"/>
请将VirtualPath对应的路径改为你自己相应的页面路径,如上面这种写法,我是在/_catalogs/masterpage/下的母版页中进行测试。保存并重启ISS后,我们就可以在页面中添加<script runat=”server”></script>代码块了。
扩展一下。比如我们想使用页面的Page_Load事件,可以这样来写(我用C#作示例):先添加<script type="text/c#" runat="server"></script>代码块,再在代码块中添加
protected void Page_Load(object sender, EventArgs e)
{
}
这样我们就可以在页面Load的时候做一些想做的事情。比如给页面上一服务器端Button控件托管单击事件,随便向页面中添加一个Button按钮,如下:
<asp:Button ID="button1" runat="server" Text="click me"></asp:Button>
在上面我们添加的Page_Load中这样写:
protected void Page_Load(object sender, EventArgs e)
{
this.button1.Click += new EventHandler(b1_Click);
}
然后再添加事件处理代码b1_Click,我们让它在点击的时候取得当前服务器时间赋给Button的Text,如下:
void b1_Click(object sender, EventArgs e)
{
this.button1.Text=DateTime.Now.ToString();
}
返回页面,单击按钮,你就可以看到效果了。这只是做一个示例,其它的就看大家自由发挥了。
关于这方面的资料比较上,老外的博客上只列出了两篇,感兴趣的朋友可以看一下:
http://msdn2.microsoft.com/en-us/library/ms562040.aspx
http://msdn2.microsoft.com/en-us/library/ms551625.aspx.
再次提醒大家一下,使用这种方式添加服务器端代码极不安全,任何拥有编辑页面权利的人都可以通过这种方式在页面中使用服务器端代码,请慎重使用。