zoukankan      html  css  js  c++  java
  • 用模版页的形式生成静态页

    这个功能在学校做过,却因为好久没用,又不太记得,所以又拿出来重写一遍加深一下映像,也希望能给一些人一些帮助。

    一般产品详细,新闻文章用的较多,我就以新闻中心为例:

    首先,创建一个简单模版页:newPage.htm

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <style type="text/css">
            ul,li{ list-style:none; margin:0; padding:0;}
            #div{ 900px; margin:0 auto;}
            #top{ 100%; background-color:Gray; display:inline-block;}
            #left{ 75%; min-height:800px; display:inline-block; float:left;}
            #right{ 25%;min-height:800px; display:inline-block; background-color:Gray;}
            #main{ 95%; margin:0 auto;}
        </style>
    </head>
    <body>
        <div id="div">
            <div id="top">
                <h1>新闻中心</h1>
            </div>
            <div id="left">
                <div id="main">
                    <h1 style=" text-align:center;">[title]</h1>
                    <p>&nbsp;<label style=" 500px; display:inline-block;">作者:[author]</label><span>时间:[time]</span></p>
                    <div>[Content]</div>
                </div>
            </div>
            <div id="right">
    
            </div>
        </div>
        
    </body>
    </html>

    页面效果:

    然后,新建一个类(让它继承IHttpHandler,并实现该接口的方法):

    public void ProcessRequest(HttpContext context)
            {
                //例: url="http://localhost:5328/new_id.com"
                int str = context.Request.Path.LastIndexOf("_");
                int end = context.Request.Path.LastIndexOf(".");
                string id = context.Request.Path.Substring(str+1,end-str-1);//获取url中的id
                Contents con = new ContentsManager().GetContentsByID(Convert.ToInt32(id));//获取新闻内容
                string newsPath = context.Server.MapPath("~/FristPage/NewsContent/new_" + id + ".html");
                context.Application.Lock();
                if (!File.Exists(newsPath))
                {
                    string modlePath = context.Server.MapPath("~/FristPage/NewDetail.htm");//获得模版的路径
                    string template = null;
                    using (StreamReader strRead = new StreamReader(modlePath))
                    {
                        template = strRead.ReadToEnd();//读取模版页的所有内容
                    }
                    string html = template.Replace("[author]", con.AddAuthor)
                        .Replace("[title]", con.CTitle)
                        .Replace("[time]", con.AddTime.ToString("yyyy-MM-dd"))
                        .Replace("[Content]", con.CContents);
                    using (StreamWriter strWrite = new StreamWriter(newsPath))
                    {
                        strWrite.Write(html);//写入静态化页面内容
                    }
                    
                }
                context.Application.UnLock();
                context.Server.Execute("~/FristPage/NewsContent/new_" + id + ".html");
            }

    最后,需要在配置文件中配置一下<httpHandlers>标签:

    <system.web>
    
            <httpHandlers>
              <add verb="*" path="~/FristPage/NewsContent/*.html" type="Enterprise.axhx.CreateNewHandler"/>
            </httpHandlers>
        </system.web>
    "~/FristPage/NewsContent/new_1.html"是触发IHttpHandler去执行axhx,如果已经存在了读取,没有时,创建html页面

     
  • 相关阅读:
    从FLC中学习的设计模式系列创建型模式(5)原型
    WP7应用开发笔记技巧 使用VisualState布置屏幕方向处理
    从FLC中学习的设计模式系列创建型模式(4)建造者
    从FLC中学习的设计模式系列结构型模式(1)适配器
    模拟Windows phone 开始菜单的瓦片动画
    解决log4net在.net 4.0 ClientProfile下无法使用
    从FLC中学习的设计模式系列创建型模式(1)单例
    从FLC中学习的设计模式系列创建型模式(2)抽象工厂
    WP7应用开发笔记(9) 应用程序栏
    同步上下文 SynchronizationContext 学习笔记
  • 原文地址:https://www.cnblogs.com/chen54/p/2820552.html
Copyright © 2011-2022 走看看