代码改变世界

利用APSX页面作为模版文件的实现

2007-08-21 17:55  麦舒  阅读(5519)  评论(23编辑  收藏  举报
 
 在BS系统开发的过程中(例如:CMS、论坛),最常见的问题,将页面与内容分离,目的有两个

1、   方便开发。程序员实现代码的可发,而美工则实现界面的设计。

2、   实现系统的换肤功能。

常用的方法主要用三种:

1、常用XSTL技术。

2、通过更换不同的CSS文件实现不同的样式。也就说,将页面的样式风格都写在一个CSS文件里,然后通过更换不同的CSS文件,实现风格 的切换。

3、常用模版技术。

在这三种方法里,用得比较的是第二和第三种,特是是第三种方法,除了能更改样式,还能对页面的结构进行更改。很多BS系统(包括Discuz)都是常用模版技。在这里,我们主要讨论模版技术来实现页面的风格的切换。

PHP里,有个很有名的开源模版项目,叫Smart,但在.NET里,却缺乏这方面的大作,在CodeProject上,找到了一个名叫“TemplateParser”模版项目。有关它的介绍,各位朋友可以到CodeProjoect上阅读,http://www.codeproject.com/useritems/mailtemplates.asp

但是这种法有三大缺陷:

1、   难以扩展。如果我们把模版文件看作是源文件,名为“TemplateParser”的程序,则相当于一个解释器,但糟糕的是,这个解释器太差了,语法、函数实现在是太有限了,如果已经把开发人员把项目编译好,发布,而用户想通修改模版文件来添加一些新的功能,几乎是不可能的事情。这是由于模版文件无法和.NET FrameWork集成起来,以及和Asp.NET的语法相兼容。

2、   无法实现所见即所得。也就是,设计人员使用开发工具进行模版的样式(例如:颜色、字体)进行修改时,无法,设计人员,只能通过运行程序,在浏览器里察看修改后的结果,很不方便,而且效率低。

3、   页面里的标记书写错误,或者更改了,无法编译检测出来。

其实.Net里的ASPX是最好的解释器,如果我们能利用上它,这几个问题就轻易解决了,.NET框架给我们提供了一个实现的方法:

HttpServerUtility.Execute (String) string参数为ASPX虚拟路径名名。

那么“所见即所得”的编辑又如何实现呢?主要是通过控件的设计器来实现。

我为大家提供了一个例子,大家可以下载来看看。/Files/ansiboy/Project1.rar

 项目里的内容如图所示

 我们先来看一下web.config文件里的内容。

<?xml version="1.0"?>

<configuration>

  
<appSettings>

    
<add key="TemplateName" value="Style1"/>

  
</appSettings>

</configuration>

很简单,在appSetting里定义了一个名为”TemplateName”的字符串,用于保当前所选择的模版。

我们再来看一下Template文件夹里的内容。在这个文件夹里,有两个名称分别为Style1和Style2的模版文件文件夹,其中的Default.aspx就是一个模版文件,我们现在要做的,就是把Default.aspx解释成HTML。这个任务主要是由Default.asxh来完成。

Default.asxh文件如下:

 1<%@ WebHandler Language="C#" Class="Default"%>
 2
 3using System.Configuration;
 4
 5using System.Web;
 6
 7public class Default : IHttpHandler
 8
 9{
10
11    public void ProcessRequest(HttpContext context)
12
13    {
14
15        string tmpName = context.Request.QueryString["Style"?? ConfigurationManager.AppSettings["TemplateName"];
16
17        string path = "Template/" + tmpName + "/Default.aspx";
18
19        context.Server.Execute(path,context.Response.Output);
20
21    }

22
23    public bool IsReusable
24
25    {
26
27        getreturn false; }
28
29    }

30
31}

32
33

首先读取出保存在Web.Config文件里的样式名称,即“TemplateName”,然后再通过“context.Server.Execute”将生成的内容输出到文件流里,完成了把模版文件转换成为HTML的工作

我们现在再把Default.aspx模版用VS打开来看看, 下图是VS用打开后所呈现的页面,这就是我所提到“所见即所得”效果,方便修改。

   
 而基于Html的模版文件,用VS打开后,所呈现的页面如下图,只能通过浏览器呈只能通过浏览器来呈现其效果,不便于修改。
 


 先给大家讲到这里吧,我将会在下一篇文章里,具体讲述它的实现。感兴趣的朋友,可以先下载把例子下载来看看