.NET MVC 两种视图发动机(Razor、Aspx)

.NET MVC 两种视图引擎(Razor、Aspx)
ASPX
优点:
        通过上面小小的对比,不难看出,与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
优点:
        ●结构紧凑,表达式流畅 
        ●易于学习 
        ●具有很好的智能感知 
        ●可以单元测试 
缺点:
        ●创建一个稍微轻量级的“标签团”问题。服务器端标签实际上提供了围绕服务器的结构代码和非服务器端代码,Razor混淆HTML和服务器端代码,纯HTML和JS的开发具有挑战性。 
        ●语法是面向HTML生成非HTML的内容可能会非常棘手。尽管这样,Razor的数据模型实际上只是字符串串联,语法和嵌套错误,既不是静态或动态检测,虽然VS.NET设计时帮助减轻这个有确点。可维护性和可重构性也受限于此。
 
总之:
        如果习惯了在WebForm中,在前台写代码,那么aspx引擎更熟悉。Razor引擎简化了输入,直接@就可以开始写代码了,显得更简洁。推荐Razor,语法更人性化。
 
语法代码示例,简单对比这两者区别
 

语法名称

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 %>.