優點:通過上面小小的對比,不難看出,與ASP.NET MVC緊密集成,對於以往ASP.NET開發人員有更好體驗。其實它還有其他幾優點:●智能感應●能選擇其它語言的 CodeDom provider (例如: C#, VB.NET, F#, Boo, Nemerle)●立即編譯或預編譯的views缺點:當然也有缺點了:●在Asp.net MVC中容易與經典的Asp.net模式混淆起來,並且Asp.net MVC已不再支持它們。 (例如: ViewState PostBack)●智能感應強迫樣式總是不在內聯的代碼塊。●設計簡單模板時會凌亂。
優點:●結構緊湊,表達式流暢●易於學習●具有很好的智能感知●可以單元測試缺點:●創建一個稍微輕量級的“標簽團”問題。服務器端標簽實際上提供了圍繞服務器的結構代碼和非服務器端代碼,Razor混淆HTML和服務器端代碼,純HTML和JS的開發具有挑戰性。●語法是面向HTML生成非HTML的內容可能會非常棘手。盡管這樣,Razor的數據模型實際上只是字符串串聯,語法和嵌套錯誤,既不是靜態或動態檢測,雖然VS.NET設計時幫助減輕這個有確點。可維護性和可重構性也受限於此。
語法名稱 |
Razor 語法 |
Aspx 等效語法 |
代碼塊(服務端) |
@{ int x = 123; string y = "test."; } |
<% int x = 123; string y = "test."; %> |
表達式 |
encode:<p>@model.Message</p> no encode:<p> @Html.Raw(model.Message)</p> |
encode:<p><%:model.Message %></p> no encode:<p><%= model.Message %></p> |
結合文本和標記的循環 |
@foreach(var item in items) { <p>@item.Prop</p> } |
<% foreach(var item in items) { %> <p><%:item.Prop %></p> <% } %> |
代碼和文本混合 |
@if (foo) { <text>Plain Text</text> }
@if (foo) { @:Plain Text is @bar } |
<% if (foo) { %> Plain Text <% } %> |
服務器端注釋 |
@* This is a server side multiline comment *@ |
<%-- This is a server side multiline comment --%> |
調用一個方法 |
@(MyClass.MyMethod<AType>()) 使用括號來明確表達是什么. |
|
混合表達式和文本 |
Hello @title. @name. |
Hello <%: title %>. <%: name %>. |