一,动态页面生成静态也的思路是怎样呢?
1》首先我们都是需要有一个静态模板,这模板的作用就是静态页的最基本模板,如下代码:
$title$ 标题:$sgin$
内容开始:$content$作者:$author$时间:$time$结束
那代码中的$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("生成页面出错"); } } ////// 动态生成静态方法 /// /// ///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; } /// /// 替换实体 /// 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,要不然可能会导致文件已占用的错误