基于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 

仔细观察它,发现它有

 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

时间: 2024-11-05 17:31:10

基于HSharp使用C#对象建立并输出HTML的相关文章

Android JNI之JAVA与C++对象建立对称关联(JNI优化设计,确保JNI调用的稳定性)

转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5930503.html Android JNI之JAVA与C++对象建立对称关联 1.JAVA对象持有C++对象的指针 在JAVA类中创建一个int类型的变量(如int mObj),用于储存C++对象的指针 在创建C++对象(如MyCPlusObj)的本地方法中,将C++对象的指针存入JAVA变量中(mObj) JNIEXPORT void JNICALL Java_nativeMethod (JNIEnv

C 动态链表的建立,输出,删除,插入

动态链表的建立,输出,删除,插入 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #define NULL 0 #define LEN sizeof(struct student) struct student { long num; float score; struct student*next; }; int n;/*n为全局变量*/ struct student *creat() { struct

php中json对象数据的输出转化

php中json对象数据的输出转化 public function get_my_now_citys(){ $datas=$this->_post('datas'); //前台js脚本传递给后端的object对象 if(!$datas){ echo '地址信息获取失败!'; } $latitude=$datas['latitude'];//维度 $longitude=$datas['longitude'];//经度 $rs=$this->get_my_addr_infos($longitude

jsp隐式对象 (输入/输出对象:request) (二)

jsp隐式对象 (输入/输出对象) request        response          out 1:request对象 用户输入的数据用来存放在Request对象中,用javax.servlet.HttpServletRequest执行 *接受数据 <body> <% out.println("协议版本类型和版本号:"+request.getProtocol()+"<br>"); out.println("当前连

基于redhat7.3 ceph对象存储集群搭建+owncloud S3接口整合生产实践

一.环境准备 安装redhat7.3虚拟机四台 在四台装好的虚拟机上分别加一块100G的硬盘.如图所示: 3.在每个节点上配置主机名 4.集群配置信息如下 admin-node node1 node2 node3 192.168.42.110 192.168.42.111 192.168.42.112 192.168.42.113 deploy.osd*1 mon*1.osd*1. rgw*1.mds*1 mon*1.osd*1 mon*1.osd*1 5.各节点配置yum源 #需要在每个主机上

黑马程序员————数组工具类对象建立

今天学习了数组工具类对象的建立巩固掌握以前学习的语句,函数,数组等相关知识 /** 建立一个用于操作数组的工具类,其中包括者常见的对数组操作的函数,如:最值,排序等 @author lostnotes */ public class ArraryTool { private ArrayTool () {}//该类中的方法都是静态的,所以不需要创建对象. //为了保证其他成员不创建该类对象,可以构造函数私有化. } /** 获取整数类型数组的最大值 @param arr 接收一个元素为int类型的

EF-实体对象建立Dome

?EF定义: EF是ADO.NET Entity Framework,是一种对象关系对象. ?EF用处: EF可以通过已应用程序为中心的概念性模式来工作. 不再对特定的数据引擎或存储架构具有依赖. 可以在不更改代码的情况下更改概念性模型与特定于存储的架构之间的映射. 映射到各种存储架构. ?个人认为:EF建立了实体对象,这些实体对象实现了.net FrameWork 下的一些底层的接口,形成了功能很强大的操纵数据. ?EF应用: ?EF创建: 我们一般说EF创建有三种情况:DBFirst.Ent

MVC为Html对象建立一个扩展方法,使用自己的控件就像使用TextBox一样方便

先看一下我想要的结果: 很容易它就是一个单选按钮组,当我后台为Html对象(HtmlHelper的一个实例,它被定义在System.Web.Mvc名称空间下的WebViewPage类,即它对于所有MVC页面都可用)建立好扩展方法后,使用以下语句就可以生成上面的效果: @Html.CreateGanderRadioButton() 扩展方法的定义: namespace Web.Helper { public static class ExtendHtml { public static MvcHt

面向对象_对象建立时内存中的变化

建立一个对象在内存中会做什么事 1.因为new用到了Person.class所以会先找到Person.class文件并加载到内存中 2.执行该类中的static代码块,如果有的话,给Person.class类进行初始化 3.在堆内存中开辟空间,分配内存地址 4.在堆内存中建立对象的特有属性,并进行默认初始化 5.对属性进行显示初始化 6.对对象进行构造代码块初始化 7.对对象进行对应的构造函数初始化 8.将内存地址赋给内存中的p变量 对象初始化过程: 先是默认初始化-------显示初始化---