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,要不然可能会导致文件已占用的错误