本文將列舉常用的 Asp.net MVC View Engines:
1. ASPX View Engine
第一個也是我們最熟悉的---aspx,相信做過WebForm開發對Aspx都比較了解:
<%@ Control Inherits="System.Web.Mvc.ViewPage<IEnumerable<Product>>" %>
<% if(model.Any()) { %>
<ul>
<% foreach(var p in model){%>
<li><%=p.Name%></li>
<%}%>
</ul>
<%}else{%>
<p>No products available</p>
<%}%>
設計目標:
一個用於呈現Web Froms頁面的輸出的視圖引擎。
優點:
•與ASP.NET MVC緊密集成
•對於以往ASP.NET開發人員有更好體驗
•智能感應
•能選擇其它語言的 CodeDom provider (例如: C#, VB.NET, F#, Boo, Nemerle)
•立即編譯或預編譯的views
缺點:
•在Asp.net MVC中容易與經典的Asp.net模式混淆起來,並且Asp.net MVC已不再支持它們。 (例如: ViewState PostBack)
•能有助於反模式的"標簽團"
•智能感應強迫樣式總是不在內聯的代碼塊。
•設計簡單模板時會凌亂。
2. Razor View
在Asp.net MVC 3 版本引入的, 可以支持UnitTest,也容易上手。
優點:
•結構緊湊,表達式流暢
•易於學習
•是不是一門新的語言
•具有很好的智能感知
•可以單元測試
•無處不在集成於ASP.NET MVC
缺點:
•創建一個稍微輕量級的“標簽團”問題。服務器端標簽實際上提供了圍繞服務器的結構代碼和非服務器端代碼,Razor混淆HTML和服務器端代碼,純HTML和JS的開發具有挑戰性(看具體的例子#1),你最終不得不“escape”的HTML和 / 或JavaScript標簽 在某些常見的情況。
•封裝可重用差:這是不切實際的調用Razor模板就好像它是一個普通的方法 - 在實踐中Razor可以調用的代碼,但反之則不然,它可以鼓勵混合代碼和呈現內容。
•語法是面向HTML生成非HTML的內容可能會非常棘手。盡管這樣,Razor的數據模型實際上只是字符串串聯,語法和嵌套錯誤,既不是靜態或動態檢測,雖然VS.NET設計時幫助減輕這個有確點。可維護性和可重構性也受限於此。
示例代碼#1
@{
<h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
foreach (var person in teamMembers)
{
<p>@person</p>
}
}
3. Hasic
Hasic 是一個用VB.NET’s XML literals的Asp.net MVC 引擎
優點:
•編譯時檢查有效的XML
•語法着色
•完整的IntelliSense
•編譯視圖
•可擴展性使用常規的CLR類,函數等
•無縫的組合性和操縱,即使它是普通的VB.NET代碼
•可單元測試
缺點:
•性能:構建整個DOM,然后將它發送給客戶端。
例子:
Protected Overrides Function Body() As XElement
Return _
<body>
<h1>Hello, World</h1>
</body>
End Function
了解更多
4. Bellevue
Bellevue 是一個Asp.net MVC框架的開源模板原形,以HTML為其核心沒有其它更多的語法。
• 遵循HTML一類的語言,而不是把它當作“只是文本”。
• 不要惹我的HTML!從HTML的數據綁定的代碼應該是分離的。
• 執行嚴格的模型 - 視圖分離
了解更多
5. Spark View Engine
另一個有趣的ASP.NET MVC與Castle項目MonoRail框架的View engine
設計目標:
理念是允許的HTML占主導地位的流和代碼,以適應無縫。
優點:
•產生更可讀的模板
•C#智能感知(VS2008沒有ReSharper的)
•SparkSense插件在VS2010(與ReSharper的)
•提供一個強大的綁定功能,以擺脫你的Views中的所有代碼,並允許您輕松地創造你自己的HTML標簽
缺點:
•沒有明確的模板邏輯的分離,從literal標記(這可以減輕命名空間前綴)
示例:
<viewdata products="IEnumerable[[Product]]"/>
<ul if="products.Any()">
<li each="var p in products">${p.Name}</li>
</ul>
<else>
<p>No products available</p>
</else>
<Form style="background-color:olive;">
<Label For="username" />
<TextBox For="username" />
<ValidationMessage For="username" Message="Please type a valid username." />
</Form>
想了解更多或下載.
6. Brail View
Brail View Engine 是移植自MonoRail項目,目標是應用於 ASP.NET MVC 框架。它位於MvcContrib項目中: 一個基礎項目。
了解更多
7. SharpTiles
SharpTiles 是一個基於構建於ASP.NET MVC和Monorail框架的模板View Engine. 它的理念是部分移植自JSTL與Tiles框架。
了解更多。
8. NHaml
設計目標:
.NET平台移植自Rails Haml的視圖引擎。來自Haml的官網:
Haml是一種標記語言,用於清潔和簡單的描述,不使用內聯代碼的任何Web文檔的XHTML... Haml的避免了需要進行顯式編碼XHTML到模板,因為它實際上是一個抽象描述的XHTML,一些代碼來生成動態內容。
優點:
•簡潔的結構(例如:D.R.Y.的)
•良好縮進
•清晰的結構
•C#智能感知(VS2008沒有ReSharper的)
缺點:
•一個來自XHTML抽象的概念,相比下你可使用其它熟悉的標記
•VS2010中沒有智能感知
示例:
@type=IEnumerable<Product>
- if(model.Any())
%ul
- foreach (var p in model)
%li= p.Name
- else
%p No products available
通過上面列舉了多種的Asp.net MVC 視圖引擎,相信對您的開發有幫助。
您可能感興趣的文章:
作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
該文章也同時發布在我的獨立博客中-Petter Liu Blog。