ScottGu在其最新的博文中推薦了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,該文章為我們簡單介紹了ASP.NET MVC中的13個擴展點。Keyvan Nayyeri(與Simone合著了Beginning ASP.NET MVC 1.0一書)又陸續(xù)發(fā)表了一些文章,對這13個擴展點分別進行深入的討論。我將在以后的隨筆中對這些文章逐一進行翻譯,希望能對大家有所幫助。
ASP.NET MVC設(shè)計的主要原則之一是可擴展性。處理管線(processing pipeline)上的所有(或大多數(shù))東西都是可替換的。因此,如果您不喜歡ASP.NET MVC所使用的約定(或缺乏某些約定),您可以創(chuàng)建自己的服務(wù)來支持您的約定,并將其注入到主管線中。
更進一步來說,例如,您可能希望從數(shù)據(jù)庫中進行檢索,直接根據(jù)person的id將其轉(zhuǎn)換為Person對象。Timothy Khouri(網(wǎng)名SingingEels)在他的文章Model Binders in ASP.NET MVC中更好的闡述了這種方法。他的代碼基于Preview 5,但其理念是一樣的。
ASP.NET MVC提供了很多result用來呈現(xiàn)視圖、JSON、純文本、文件并重定向到其他action。如果您需要其他類型的result,可以自定義ActionResult,并實現(xiàn)ExecuteResult方法。例如,如果您希望將PDF文件作為結(jié)果發(fā)送,您需要使用PDF庫編寫能夠生成PDF的ActionResult。又如RSS feed,可參見how to write a RssResult in this post。
如果您確實希望編寫自己的view engine,可以看一下Brad Wilson的文章: Partial Rendering & View Engines in ASP.NET MVC。
13.HtmlHelper
視圖必須十分簡單整潔,它們只能包含html標記并調(diào)用HtmlHelper的輔助方法。視圖中不能包含任何代碼,所以輔助方法必須十分方便,使您可以將代碼從視圖中提取出來,放到一個可測試的環(huán)境中去。正如Rob Conery所說:如果有if,就構(gòu)造輔助方法(If there's an IF, make a Helper)。
什么是HtmlHelper輔助方法?其實就是HtmlHelper類的擴展方法,這是唯一的要求。
你可以從Rob的文章Avoiding Tag Soup中了解到為什么說HtmlHelper是封裝視圖中代碼的好方法。
如果您想詳細了解更多關(guān)于該話題的內(nèi)容,可以考慮購買即將出版的Beginning ASP.NET MVC(我是作者之一)或Professional ASP.NET MVC(ASP.NET MVC開發(fā)團隊編寫)或ASP.NET MVC in Action (Jeffrey Palermo和Ben Scheirman著)。