在C#代码中有的时候我们需要返回视图。一般为此往往要专门建立cshtml文档。如果直接在代码中写HTML往往又容易产生语法错误。如果有一种方式能够高效的构建正确的HTML文档,并有效借助C#的强类型特性,那么在需要输出HTML的时候会大大提升效率。这对于ASP.Net和ASP.Net MVC中就可以在控制器中直接渲染生成视图。对于复杂的视图逻辑也可以转移到控制器中完成。
找了很久,我还是找到了一个比较可行的方法。大概方法是用到了一个叫做HSharp的库。用来以一种弱类型语言的处理方式来应用在C#,处理HTML。能够反序列化和序列化HTML,也不需要建立对应的C#类。
HSharp在Github上的主页:https://github.com/Obisoft2017/HSharp
安装:
PM> Install-Package Obisoft.HSharp
仔细观察它,发现它有
Document.GenerateHTML()
以及
public static string SerializeHtml(HDoc Document)
两个方式来序列化。开始我纳闷很久这有什么区别,在Github上翻了翻代码发现其实是一样的。
但这两种方式都需要构建HDoc文档。还好构建不算太难。
var Document = new HDoc(DocumentOptions.BasicHTML); Document["html"]["body"].AddChild("div"); Document["html"]["body"]["div"].AddChild("a", new HProp("href", "/#")); Document["html"]["body"]["div"].AddChild("table"); Document["html"]["body"]["div"]["table"].AddChildren( new HTag("tr"), new HTag("tr", "SomeText"), new HTag("tr", new HTag("td"))); var Result = Document.GenerateHTML(); Console.WriteLine(Result);
上面的代码中构建了基本HTML,然后在Body下面增加了Div。并在Div里增加了a和table。
同时在Table里增加里三个TR
输出如下:
<html> <head> <meta charset="utf-8"></meta><title> Example </title> </head> <body> <div> <a href="/#"></a><table> <tr></tr><tr> SomeText </tr> <tr> <td></td></tr> </table> </div> </body> </html>
有的时候想,既然这个库这么屌,不如再封装一层,做一个可以让用户在不懂HTML的情况下生产HTML的工具。
准备再研究研究HSHarp这个库。据说还可以反序列化HTML