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


     
     在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打开后,所呈现的页面如下图,只能通过浏览器呈只能通过浏览器来呈现其效果,不便于修改。
     


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


  • 相关阅读:
    React PC端悬浮锚点吸顶导航
    LESS 移动端一像素1px线条CSS解决方案
    React Swiper轮播图
    Win10 虚拟机安装mac系统
    ReactNative Windows环境初始化项目
    Win10 安装AndroidStudio
    Win10 环境安装JDK
    【mysql基础学习篇】mysql服务器架构简介
    uniapp封装小程序雷达图组件实现
    这12道Spring面试题要是还不会的话?就白干了!
  • 原文地址:https://www.cnblogs.com/ansiboy/p/863175.html
Copyright © 2020-2023  润新知