[翻譯] ASP.NET MVC Tip #14 – 建立模板輔助方法

來源:互聯網
上載者:User
[翻譯] ASP.NET MVC Tip #14 – 建立模板輔助方法

原文地址:http://weblogs.asp.net/stephenwalther/archive/2008/07/07/asp-net-mvc-tip-14-create-a-template-helper-method.aspx

翻譯:Anders Liu

摘要:在這個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

<br />using System;<br />using System.Text;<br />using System.Collections;<br />using System.Web.Mvc;</p><p>namespace Helpers<br />{<br /> public static class TemplateExtensions<br /> {<br /> public static string RenderTemplate(this HtmlHelper helper, IEnumerable items, string virtualPath)<br /> {<br /> var sb = new StringBuilder();<br /> foreach (object item in items)<br /> {<br /> sb.Append( helper.RenderUserControl(virtualPath, item));<br /> }<br /> return sb.ToString();<br /> }<br /> }<br />}<br />

假設你想顯示一個電影列表。你可以使用清單2中的HomeController返回一個電影實體的集合。Index()操作執行了一個LINQ to SQL查詢,並將查詢結果傳遞給Index視圖。

清單2 - HomeController.cs

<br />using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Web;<br />using System.Web.Mvc;<br />using Tip14.Models;</p><p>namespace Tip14.Controllers<br />{<br /> public class HomeController : Controller<br /> {<br /> private MovieDataContext _dataContext = new MovieDataContext();</p><p> public ActionResult Index()<br /> {<br /> var movies = _dataContext.Movies;<br /> return View(movies);<br /> }<br /> }<br />}<br />

清單3中的視圖簡單地調用了RenderTemplate()方法,並肩ViewData.Model和一個包含了每一個電影模板的MVC使用者控制項的路徑傳遞給該方法。

清單3 - Index.aspx

<title></title></p><p>

MovieTemplate.ascx MVC使用者控制項是強型別的。清單4列出了該使用者控制項的後台代碼。注意使用者控制項的強型別,使其只能展現Movie實體。

清單4 - MovieTemplate.ascx.cs

<br />using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Web;<br />using System.Web.Mvc;<br />using Tip14.Models;</p><p>namespace Tip14.Views.Home<br />{<br /> public partial class MovieTemplate : System.Web.Mvc.ViewUserControl<movie><br /> {<br /> }<br />}<br /></movie>

最後,清單5給出了MVC使用者控制項的視圖部分。注意你可以使用ViewData.Model.Title和ViewData.Model.Director這樣的運算式來顯示電影的標題和導演。這些運算式能夠工作是因為你為MVC使用者控制項使用了強型別,使它只能展現電影實體。

清單5 - MovieTemplate.ascx

<strong></strong><br /><br />Director: </p><hr />

當你請求Index視圖時,你將得到圖1所示的頁面。注意對於每個電影都呈現了一個MVC使用者控制項。

圖1 - 使用模板呈現電影記錄

小結

在這個Tip中,我介紹了在ASP.NET MVC應用程式中如何建立和使用模板。我示範了如何通過建立MVC使用者控制項來建立模板,以及如何使用模板來呈現一組資料庫記錄。今後再也不用在ASP.NET MVC應用程式裡惦記著使用Repeater控制項了。

此處下載原始碼:http://weblogs.asp.net/blogs/stephenwalther/Downloads/Tip14/Tip14.zip。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.