原本是用asp.net webpages作的博客网站,数据库用了一个陌生的本地数据库,只是以为用起来很爽快,用新鲜的东西有一种刺激。后来数据库挂了,估计是存某个字段的时候出了问题,但是新鲜的东西,也不知道用什么工具能够查,只好怪本身太年轻。费了一番力气,总算是把数据挽救回来,忽然意识到阿里云那边又快到期了。html
不打算续租了,备案又麻烦,干脆就改为静态,挂GitHub吧。前端
关于GitHub上建站的方法直接看这里 https://pages.github.com/git
建完以后设置CNAME和A Record绑定好域名。github
以后就能够用Git来上传页面了,还可使用Jekyll来制做博客。可是我是不懂那些的,技能树点的不同,也懒得为了一个博客去学另外一颗树上的东西。web
追溯当时用webpages的缘由,其实也是由于Razor,因此计划落定,用Razor作模版,Markdown作博文编辑,最后生成html。还须要把博文记录下来,随便用什么均可以,就直接存本地文件了,换言之这文件就成了我网站的数据库,为了之后检查方便就用文本文件。数据库
一、Razor模板markdown
二、Markdown编辑asp.net
三、Json存档编辑器
这样定好以后,建立解决方案,WPF项目模板,NuGet添加RazorEngine、MarkdownSharp、NewtonsoftJson,建立一个窗体,Page导航,两个Page,分别是目录页和内容页。工具
目录页是一个ListView,列出全部的文章,建立Article类,有属性Title, Content, Author, Time, Description, Link。Link是生成以后的存放的静态页面的路径,能够带/符号。
目录页上能够新建和删除文章,右下角是导出按钮,点击生成整站的页面。由于是博客站,因此确定有两类页面,也是目录页和博文内容页。目录页是根路径下的index.html, 内容页将依据编辑时候录入的Link属性,生成对应的路径,并在改路径下建立index.html,因而你访问的时候能够是这个样子http://localhost/2015/1/1/link/
双击ListViewItem,也就是其中一篇文章,Page Navigate到内容页,在内容页你能够编辑文章,左边是编辑界面右边是预览界面。编辑采用Markdown语法。
Save保存,Back按钮导航回上一页。
这里我在Save的时候会序列化成JSON写入本地文件,须要妥善保存此文件。
在目录页进行导出操做的时候,会读取模板文件,模板文件有两个,请看下图
编译后使用的时候须要确保Template目录下有这两个文件。后缀是cshtml,虽然能够是任意后缀,但cshtml能获得vs编辑器的帮助,模板中使用razor语法调用@Model中的属性,自定义前端标签来进行布局。在Index.cshtml中,Model就是List<Article>,在Detail.cshtml中,Model是Article。
以文章页面的导出为例,关键代码以下:
Markdown mk = new Markdown(); string content = mk.Transform(article.Content);//markdown转换html var model = new {
ID= article.ID, Title = article.Title, Content = content, Link = article.Link, WriteTime = article.WriteTime, Description = article.Description, Author = article.Author, }; string text = Engine.Razor.RunCompile(WebSource.Instance.DetailTemplate, "templateDetail", null, model);//razor转换html string outputFilePath = string.Format("{0}/output/{1}", AppDomain.CurrentDomain.BaseDirectory, article.Link); Directory.CreateDirectory(outputFilePath);//建立目录 File.WriteAllText(outputFilePath + "/index.html", text);//写入文件
最后生成的整站页面在output目录下。
工具完成,花了一个多小时的时间。嗯,Razor用来作代码生成确实很好使。
下面是第一个试验品:
http://ifchen.com/