Razor 設計目標:最小化控制字元,讓程式碼與標記自然共存。本文對比 ASPX 與 Razor,並逐行解析範例展示推斷邏輯。
<!-- ASPX -->
<ul>
<% foreach(var p in Model.Products) { %>
<li><%= p.Name %> (<%= p.Price %>)</li>
<% } %>
</ul>
<!-- Razor -->
<ul>
@foreach(var p in Model.Products) {
<li>@p.Name ($@p.Price)</li>
}
</ul>
Razor 僅保留 @ 一字元,移除 <% %>、<%= %> 等儀式符號。
<ul>:標記解析器持續掃描至 @。@foreach...{:遇到 @,非 Email 格式 → 切換程式碼解析器。識別 foreach 區塊以 {} 界定。<li>@p.Name ($@p.Price)</li>:程式碼區塊中遇 HTML 標記 <li> → 推斷切回標記解析。標記區塊中遇 @ → 切程式碼解析隱含運算式。</li> 結束標記區塊 → 回 foreach 程式碼區塊。}:結束 foreach 區塊,回文件頂層標記狀態。</ul>:持續標記解析至檔案結尾。標記文件
└─ 程式碼區塊 (foreach)
└─ 標記區塊 (<li>...</li>)
└─ 程式碼區塊 (@p.Name / @p.Price)
Razor 以語法理解取代儀式標記,透過堆疊式狀態機實現標記與程式碼的自由巢狀,極大降低視覺雜訊。