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

      使用时的界面示意如下图所示。

      我们试着再讲上述范例写得更复杂一点:

 

posted @ 2015-12-21 14:12  RunningYY  阅读(154)  评论(0)    收藏  举报