8.3--扩展HTML类
使用HTML辅助方法可以让开发View页面的过程节省不少时间,但有时候难免会觉得内建的HTML辅助方法不太够用,怎么办才好呢?ASP.NET MVC的另一项优点就是“高扩充性”,此刻就派上用场。ASP.NET MVC允许开发人员自行扩充HTML辅助方法,而且方法众多,你可以选择喜爱的方式来建立适当的HTML辅助方法。
以下是一个非常简单的范例,该范例传入三个参数是,分别是url、alternateText与title,最后的结果仅相应一个HTML标签。我们先在项目根目录下新增一个Helpers目录,并建立一个ImageHelpers类型文件,如下图所示。
开发HTML辅助方法必须替HtmlHelper类型新增扩展方法(Extension Method),因为C#3.0的扩展方法是一种特殊的静态方法,因此在开发HTML辅助方法时必须声明为静态方法(static Method)并放在一个静态类别里。
此外,自定义HTML辅助方法时还有一个重点,那就是从HTML辅助方法里回传的类型可以是简单的string字符串类型,也可以是Sytem.Web.Mvc.MvcHtmlString类型,差别在于,通过Razor输出HTML预设就会对所有输出进行HTML编码动作,所以如果回传string字符串类型,其输出的内容将会被HTML编码后输出,如果你从HTML辅助方法回传MvcHtmlString类型的话,如果内容包含标签数据,那么久会原封不动地输出HTML标签。以我们的这个范例来说,必须回传MvcHtmlString类型,代码如下:
namespace PagingExample.Helpers { public static class ImageHelpers { public static MvcHtmlString Img(this HtmlHelper helper, string url, string alternateText, string title) { return MvcHtmlString.Create(String.Format("<img src='{0}' alt='{1}' title='{2}' />", url, alternateText, title)); } } }
接着如果要在View页面中使用这个Img辅助方法,由于使用扩展方法的关系,必须要预先载入命名空间才可以使用,因此,必须在View的最上方将命名空间应用,才能在View里面使用这个自定义的HTML扩展方法:
@using PagingExample.Helpers
使用时的界面示意如下图所示。
我们试着再讲上述范例写得更复杂一点: