C# 封装HtmlHelper组件:BootstrapHelper

2019-12-30 13:35:50王冬梅

前言:之前学习过很多的Bootstrap组件,博主就在脑海里构思:是否可以封装一套自己Bootstrap组件库呢。再加上看到MVC的Razor语法里面直接通过后台方法输出前端控件的方式,于是打算仿照HtmlHelper封装一套BootstrapHelper,今天只是一个开头,讲述下如何封装自己的Html组件,以后慢慢完善。

一、揭开HtmlHelper的“面纱”

经常使用Razor写法的园友都知道,在cshtml里面,我们可以通过后台的方法输出成前端的html组件,比如我们随便看两个例子:

bootstraphelper,htmlhelper

输出成Html之后

bootstraphelper,htmlhelper

博主的好奇心又来了,它是怎么做到的呢?于是将Html对象以及Label()方法转到定义

bootstraphelper,htmlhelper

bootstraphelper,htmlhelper

由此可以看出Html对象是HtmlHelper类型的一个实例,而Label()方法则是HtmlHelper类型的一个扩展方法,所以就可以直接通过Html.Label()这种方式直接调用。

既然我们想要封装自己的HtmlHelper,那么我们就必须要了解Label()方法里面是如何实现的,我们伟大的Reflector又派上用场了。我们来反编译System.Web.MVC.dll看看。找到LabelExtensions这个类

bootstraphelper,htmlhelper

经过一系列的转到定义,我们找到最终的方法

bootstraphelper,htmlhelper

同样,我们找到TextBox()最终定义的方法

bootstraphelper,htmlhelper

哟西,原来就是TagBuilder这个一个小东西,让人觉得神奇得不要不要的。所以有时我们需要敢于反编译,或许看似高级的背后其实很简单呢~~

二、BootstrapHelper组件封装准备

1、定义BootstrapHelper

有了以上的基础做准备,接下来就是具体的实现了,我们新建了一个空的MVC项目,添加如下文件。

bootstraphelper,htmlhelper