zoukankan      html  css  js  c++  java
  • 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,要不然可能会导致文件已占用的错误

     

  • 相关阅读:
    谈谈关于PHP连接数据库的两种方法(PDO&Mysqli)
    关于Mui严格模式下的报错解决方案
    CSS常用选择器的认识
    HTML汇总以及CSS的一些开端
    LAMP架构之PHP-FPM 服务器 转
    httpd配置
    notapai++ 使用小技巧
    转载-notepad++ zend-coding使用
    Apache下的配置文件httpd.conf、httpd-vhosts.conf 转
    Apache本机不同端口多站点配置:httpd-vhosts.conf(转载)
  • 原文地址:https://www.cnblogs.com/May-day/p/5412068.html
Copyright © 2011-2022 走看看