http://weblogs.asp.net/stephenwalther/archive/2008/06/13/asp-net-mvc-tip-1-creating-new-html-helpers-with-extension-methods.aspx

摘要:在这个Tip中,Stephen Walther创建了两个新的HTML Helper,你可以直接在ASP.NET MVC视图中使用它们。Stephen Walther展示了如何用扩展方法创建用于显示无序列表和有序列表的HTML Helper。



在为ASP.NET MVC应用程序创建视图时,你可以使用HTML Helper来呈现标准的HTML标签。例如,对于下面的代码:

[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper<input name="inpSubmit" type="submit" value="Click Here!" />



可以写为:

[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper<%= Html.SubmitButton("inpSubmit""Click Here!"%>



后面这种写法可以为你节省大量的时间。但如果没有与你要呈现的标签对应的HTML Helper呢?例如,假设你要在视图中为数据库记录显示一个无序列表。HtmlHelper类中并未包含用于显示无序列表的方法。别灰心,如果HTML Helper中没有你需要的方法,尽管去扩展它吧!

通过建立新的扩展方法,你可以向HtmlHelper类添加新的功能。扩展方法看上去和普通的实例方法类似。然而,与实例方法不同,你可以在完全不同的类中为另外一个类添加扩展方法。

在Visual Basic .NET中,创建扩展方法的方法是创建一个模块,并用一个特殊的特性来声明一个方法。在C#中,可以在一个静态类中定义扩展方法,并使用关键字this来指出要扩展的类。

下面展示了如何为HtmlHelper类添加扩展方法来为数据库记录显示有序列表和无序列表:

清单1 - ListExtensions.vb (VB.NET)

 1[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML HelperImports System
 2[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML HelperImports System.Collections
 3[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML HelperImports System.Text
 4[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML HelperImports System.Web
 5[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML HelperImports System.Web.Mvc
 6[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML HelperImports System.Runtime.CompilerServices
 7[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper
 8End Namespace



清单1 - ListExtensions.cs (C#)

[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helperusing System;
[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper
using System.Collections;
[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper
using System.Text;
[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper
using System.Web;
[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper
using System.Web.Mvc;
[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper 
[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper
namespace BulletedListHelper.HtmlHelpers
}



ListExtensions类有两个公共方法——OrderedList()和UnorderedList()。将集合分别传入两个方法,可以分别显示有序和无序列表。注意这些方法返回的是字符串。的确,HTML Helper方法的作用就是向浏览器呈现一个格式化的字符串。

创建完扩展方法后,你可以在视图中像下面这样使用它:

清单2 - Index.aspx

>



注意在文件的顶部引入了BulletedList.HtmlHelpers命名空间。Html.OrderedList()用于呈现有序列表,而Html.UnorderedList()用于呈现无序列表。注意在View的Html属性所暴露的HtmlHelper对象上调用了这些方法,和其他扩展方法一样。当你在浏览器中打开该视图时,可以得到如图1所示的页面:

图1 - 使用自定义HTML Helper呈现的Index.aspx
[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper

最后清单3给出了HomeController所暴露的Index()方法,该方法展示了如何将一个电影记录集合传递给Index.aspx视图。电影记录是利用Linq to SQL查询得到的。

清单3 - HomeController.vb (VB.NET)

End Class



清单3 - HomeController.cs (C#)

[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helperusing System;
[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper
using System.Collections.Generic;
[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper
using System.Linq;
[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper
using System.Web;
[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper
using System.Web.Mvc;
[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper
using BulletedListHelper.Models;
[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper 
[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper
namespace BulletedListHelper.Controllers
}



你可以使用这种方式向ASP.NET MVC视图中呈现几乎任何东西。例如,你可以使用类似的方法创建TreeView、Menu、TabStrip等等。

此处下载源代码:http://weblogs.asp.net/blogs/stephenwalther/Downloads/Tip1/ListHtmlHelpers.zip

----

广告:欢迎光临[.NET正则表达式库] http://regex-lib.net/

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-01-24
  • 2022-12-23
  • 2021-09-12
  • 2022-02-20
  • 2021-07-27
猜你喜欢
  • 2021-09-24
  • 2022-01-07
  • 2021-12-01
  • 2021-06-09
  • 2022-01-16
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案