C#.NET动态页面静态化生成

一,动态页面生成静态也的思路是怎样呢?

1》首先我们都是需要有一个静态模板,这模板的作用就是静态页的最基本模板,如下代码:

<!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$</title>
</head>
<body>
    <div>  <h1>标题:$sgin$</h1></div>
    <div>
        内容开始:$content$
    </div>
    <div>
        作者:$author$
    </div>
    <div>时间:$time$</div>
    <div>结束</div>
</body>
</html>

那代码中的$content$等标识是用来替换的标识

2》我们建一个MVC项目,在HomeControllor中的代码,如下:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using System.Xml;

namespace DynamicCreateStaticHtml.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            string htmlName = WriteFile(new HtmlModel()
            {
                Title = "生成静态页面",
                Content = "动态自动生成静态页面并赋值的方法",
                Author = "admin",
                Time = DateTime.Now.ToString(),
                Sgin = "生成静态页面"
            });
            if (!string.IsNullOrWhiteSpace(htmlName))
            {
                return Redirect("/StaticHtml/" + htmlName + ".html");
            }
            else
            {
                return Content("生成页面出错");
            }
        }
        /// <summary>
        /// 动态生成静态方法
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public string WriteFile(HtmlModel model)
        {
            //获取当前项目的文档物理路径,用于生产静态HTML页面存地址

            string path = Server.MapPath("./StaticHtml/");
            //gb2312简体中文编码
            Encoding code = Encoding.GetEncoding("gb2312");
            // 读取模板文件,在项目下的文件
            string temp = Server.MapPath("/StaticHtml/HtmlTemp.html");
            StreamReader sr = null;
            StreamWriter sw = null;
            string str = "";
            string htmlfilename = Guid.NewGuid().ToString();
            try
            {
                sr = new StreamReader(temp, code);
                str = sr.ReadToEnd(); // 读取文件
                //替换内容,模板文件已经读入到名称为str的变量中了
                str = str.Replace("$title$", model.Title); //模板页中的title
                str = str.Replace("$sgin$", model.Sgin); //模板页中的sgin
                str = str.Replace("$content$", model.Content); //模板页中的content
                str = str.Replace("$author$", model.Author);//模板页中的author
                str = str.Replace("$time$", model.Time); //模板页中的time
                // 写文件
                sw = new StreamWriter(path + htmlfilename + ".html", false, code);
                sw.Write(str);
                sw.Flush();
            }
            catch (Exception ex)
            {
            }
            finally
            {
                sw.Close();
                sr.Close();  //必须关闭静态文件链接,要不然会报错
            }
            return htmlfilename;
        }
        /// <summary>
        /// 替换实体
        /// </summary>
        public class HtmlModel
        {
            public string Title { get; set; }
            public string Sgin { get; set; }
            public string Content { get; set; }
            public string Author { get; set; }
            public string Time { get; set; }
        }
    }
}

3》由以上代码我们可以看到,我们将静态模板的标识替换成我们要显示的标识,然后返回这个页面,这也是动态页面静态话生成的核心思路,但是我们要注意模板的文件连接需要close,要不然可能会导致文件已占用的错误

 

 

 

posted @ 2018-03-20 16:54  叶丶梓轩  阅读(2111)  评论(0编辑  收藏  举报