基于HSharp使用C#对象建立并输出HTML

在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 

基于HSharp使用C#对象建立并输出HTML

仔细观察它,发现它有

 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