/// <summary> /// 创建静态文件 /// </summary> /// <param>Html代码</param> /// <param>生成路径</param> /// <returns></returns> public bool CreateFileHtmlByTemp(string result, string createpath) { if (!string.IsNullOrEmpty(result)) { if (string.IsNullOrEmpty(createpath)) { createpath = "/default.html"; } string filepath = createpath.Substring(createpath.LastIndexOf(@"\")); createpath = createpath.Substring(0, createpath.LastIndexOf(@"\")); if (!Directory.Exists(createpath)) { Directory.CreateDirectory(createpath); } createpath = createpath + filepath; try { FileStream fs2 = new FileStream(createpath, FileMode.Create); StreamWriter sw = new StreamWriter(fs2, new System.Text.UTF8Encoding(false));//去除UTF-8 BOM sw.Write(result); sw.Close(); fs2.Close(); fs2.Dispose(); return true; } catch { return false; } } return false; }
五、我们来写个方法调用静态模板,并且传递数据模型实体类 创建Html静态页
/// <summary> /// 解析模板生成静态页 /// </summary> /// <param>模板地址</param> /// <param>静态页地址</param> /// <param>数据模型</param> /// <returns></returns> public bool CreateStaticPage(string temppath, string path, RazorEngineTemplates.Models.Articles t) { try { //获取模板Html string TemplateContent = GetHtml(temppath, System.Text.Encoding.UTF8); //初始化结果 string result = string.Empty; //解析模板生成静态页Html代码 result = Razor.Parse(TemplateContent, t); //创建静态文件 return CreateFileHtmlByTemp(result, path); } catch (Exception e) { throw e; } }
好了,大功告成,是不是很简单。
这里只是一个很简单的应用,没有读取数据,也没有列表,只有一个文章数据模型,下一部分我们将介绍 多模型模板解析,因为是多模型 所以 生成静态页面的时候 就不是传递一个具体模型实体类 我们会用到 反射,通过反射模型属性 获取数据,有不熟悉反射的可以提前研究一下,也可以直接看下一部分的反射代码也很简单的。
第二部分 面向接口的多数据模型模板解析
这一部分,我们介绍使用接口来解析模板,包括列表等多种模型解析,用到了Spring注入和反射还有接口等,有不熟悉的可以百度搜一下或者评论留言。
我们接着上面的示例,我们新建两个类库 一个是存放数据模型的 我们叫Domain;另外一个是接口和实现类的 我们叫Service,然后我们添加他们之间的引用
一、我们在Domain下创建几个测试类
Articles - 文章测试类
Company - 公司测试类
Column - 栏目测试类
TemplateView - 模型解析类(这个是不是比较弱智?我也没深入研究多个模型怎么反射出来 所以 我加了这么个算是公用的类 没有对应的数据表 只是解析模板的时候 作为中间件用用)
public class Articles { /// <summary> /// 文章ID /// </summary> public int Id { get; set; } /// <summary> /// 文章标题 /// </summary> public string Title { get; set; } /// <summary> /// 文章内容 /// </summary> public string Content { get; set; } /// <summary> /// 作者 /// </summary> public string Author { get; set; } /// <summary> /// 发布时间 /// </summary> public DateTime CreateDate { get; set; } } public class Company { /// <summary> /// 公司Id /// </summary> public int Id { get; set; } /// <summary> /// 公司名称 /// </summary> public string CompanyName { get; set; } /// <summary> /// 公司电话 /// </summary> public string CompanyTel { get; set; } /// <summary> /// 联系人 /// </summary> public string ContectUser { get; set; } /// <summary> /// 创建时间 /// </summary> public DateTime CreateDate { get; set; } } public class Column { /// <summary> /// 栏目ID /// </summary> public int Id { get; set; } /// <summary> /// 栏目名称 /// </summary> public string Title { get; set; } /// <summary> /// 文章列表 /// </summary> public virtual ICollection<Articles> Articles { get; set; } } public class TemplateView { /// <summary> /// ID /// </summary> public int Id { get; set; } /// <summary> /// 标题 /// </summary> public string Title { get; set; } /// <summary> /// 内容 /// </summary> public string Content { get; set; } /// <summary> /// 作者 /// </summary> public string Author { get; set; } /// <summary> /// 时间 /// </summary> public DateTime CreateDate { get; set; } /// <summary> /// 公司名称 /// </summary> public string CompanyName { get; set; } /// <summary> /// 公司电话 /// </summary> public string CompanyTel { get; set; } /// <summary> /// 联系人 /// </summary> public string ContectUser { get; set; } /// <summary> /// 文章列表 /// </summary> public virtual ICollection<Articles> Articles { get; set; } }