如果想创建如同 ASP.NET MVC Framework 中标准的 HTML Helper 一样工作的 HTML Helper,则需要创建扩展方法。扩展方法可以用于向现有类添加新的方法。创建 HTML Helper 方法时,会将新方法添加到由视图的 Html 属性表示的 HtmlHelper 类中。
程序清单 3 中的类将扩展方法添加到名称为 Label() 的 HtmlHelper 类中。关于此类,有几点需要注意的地方。首先,请注意这个类是静态类。必须在静态类中定义扩展方法。
其次,请注意 Label() 方法的第一个参数前具有关键字 this。扩展方法的第一个参数表明扩展方法所扩展的类。
程序清单 3 Helpers\LabelExtensions.cs
using System;
using System.Web.Mvc;
namespace System.Web.Mvc //注意: 这样 namespace MvcApplication1.Helpers 是不行的
{
public static class LabelExtensions
{
public static string Label( this HtmlHelper helper, string target, string text)
{
return String.Format("<label for='{0}'>{1}</label>", target, text);
}
}
}
using System.Web.Mvc;
namespace System.Web.Mvc //注意: 这样 namespace MvcApplication1.Helpers 是不行的
{
public static class LabelExtensions
{
public static string Label( this HtmlHelper helper, string target, string text)
{
return String.Format("<label for='{0}'>{1}</label>", target, text);
}
}
}
创建扩展方法并成功生成应用程序后,扩展方法如同类的其他所有方法一样出现在 Visual Studio Intellisense 中,唯一的不同之处是,扩展方法旁会显示一个特殊的符号(向下箭头图标)。
<%= Html.Label("firstName", "First Name:") %>
在本教程中,我们学习了创建自定义 HTML Helper 的两种方法。首先,我们学习了如何通过创建返回字符串的静态方法创建自定义 Label() HTML Helper。接下来,我们学习了如何通过在 HtmlHelper 类中创建扩展方法创建自定义 Label() HTML Helper 方法。