[翻译] ASP.NET MVC Tip #14 – 创建模板辅助方法

[翻译] ASP.NET MVC Tip #14 – 创建模板辅助方法

摘要:在这个Tip中,你将学到在MVC框架中显示数据库数据时,如何创建和使用模板。Stephen Walther介绍了如何创建一个名为RenderTemplate()的辅助方法。

7月4号这个周末,当我回到加利福尼亚的家中后,我和我聪明的哥哥谈起来使用ASP.NET Web Forms、ASP.NET MVC和Ruby on Rails创建Web应用程序的不同。我于是感叹在创建ASP.NET MVC应用程序时,我真的很想念控件。我尤其想念ASP.NET Web Forms控件中的模板带来的HTML与UI逻辑之间的清晰的分离。Repeater控件和for...next循环真的不一样。

我的哥哥告诉我一个很吃惊的东西。他说“模板,Ruby on Rails有模板,他们称之为partials。”最初,我并不理解。我一位Ruby on Rails中的partials或多或少和ASP.NET MVC中的用户控件有点像。然而,我哥哥向我解释了当在Ruby on Rails应用程序中呈现一个partial时,你可以向其传递一组项的集合。集合中的每一项都由partial来呈现。

酷。你可以用同样的方式在ASP.NET MVC应用程序中创建模板。创建一个新的辅助方法,它接受一个IEnumerable和一个用户控件的路径。对于IEnumerable中的每一个元素,辅助方法都会将用户控件作为一个模板。清单1包含了名为RenderTemplate()的辅助方法。

清单1 - TemplateExtensions.cs

假设你想显示一个电影列表。你可以使用清单2中的HomeController返回一个电影实体的集合。Index()操作执行了一个LINQ to SQL查询,并将查询结果传递给Index视图。

清单2 - HomeController.cs

清单3中的视图简单地调用了RenderTemplate()方法,并肩ViewData.Model和一个包含了每一个电影模板的MVC用户控件的路径传递给该方法。

清单3 - Index.aspx

MovieTemplate.ascx MVC用户控件是强类型的。清单4列出了该用户控件的后台代码。注意用户控件的强类型,使其只能展现Movie实体。

清单4 - MovieTemplate.ascx.cs

最后,清单5给出了MVC用户控件的视图部分。注意你可以使用ViewData.Model.Title和ViewData.Model.Director这样的表达式来显示电影的标题和导演。这些表达式能够工作是因为你为MVC用户控件使用了强类型,使它只能展现电影实体。

清单5 - MovieTemplate.ascx

当你请求Index视图时,你将得到图1所示的页面。注意对于每个电影都呈现了一个MVC用户控件。

图1 - 使用模板呈现电影记录

图1 - 使用模板呈现电影记录

小结

在这个Tip中,我介绍了在ASP.NET MVC应用程序中如何创建和使用模板。我演示了如何通过创建MVC用户控件来创建模板,以及如何使用模板来呈现一组数据库记录。今后再也不用在ASP.NET MVC应用程序里惦记着使用Repeater控件了。

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

posted @ 2008-08-03 09:53  Anders Liu  阅读(2133)  评论(6编辑  收藏  举报