2010-07-04 137 views
39

閱讀Scott Guthrie的博客文章,瞭解有關ASP.NET MVC的新Razor視圖引擎並閱讀此question比較可用視圖引擎。ASP.NET MVC剃刀視圖引擎

Razor似乎解決了默認視圖引擎的大部分問題。作爲開發人員,哪些功能差異會使您成爲一個引人注目的選擇?缺乏哪些功能會阻止您使用它?

+4

這應該是CW? – 2010-07-07 08:09:54

+0

我這麼認爲。 但是,男人,剃刀不能很快到達這裏。 – 2010-07-27 06:46:04

回答

20

除了標記語言之外,還有很多可以查看引擎的東西。我會懷念幾星火特點:

  • 使用相同的標記語言編寫HTML擴展,不C#(宏) - 我看到剃刀也支持這一點,我希望它支持方法/參數覆蓋;
  • 自定義標籤(寫_Tag.spark使用<標籤/ >);
  • 自動生成的變量,如varIsFirst,varIndex等;
  • 特殊表達形式(?{}爲條件屬性,$!{}跳過錯誤等);
  • 很好的主/部分佈局支持,包括部分指定標記的部分應該只在主內渲染一次(例如腳本包含);
  • 您仍然可以擁有WebForms標記 - 非常適合兼容性和增量升級;
  • 支持在對方內使用「」和「'引號(非常有用)。

我喜歡循環/ IFS更星火語法 - 混合HTML < >和C#{}括號看起來並不太好 - 但是這純屬個人意見。

剃刀也有非常有前途的功能,例如,內聯模板。鑑於Spark的創造者被微軟聘用,我認爲Razor有很好的寫作能力,非常有用,並且支持很好的視圖引擎。當然,我不會用Razor重寫數百個Spark視圖(雖然我用Spark重寫了幾十個WebForms視圖)。但我一定會認真看待剃刀 - 我只是從你的問題中發現了這一點,謝謝 - 我現在看到的看起來很有希望。當然,它不與WebForms競爭(任何視圖引擎都優於WebForms),但如果您還沒有投入太多的視覺引擎,它對於新的ASP.NET MVC項目來說看起來是個不錯的選擇。

+0

re:'autogenerated variables' - 你可以使用John Skeet非常聰明的'SmartEnumerable'類來實現這個與剃刀/網頁表單:http://www.yoda.arachsys.com/csharp/miscutil/usage/smartenumerable.html – 2010-12-31 11:46:46

4

很顯然我還沒有在實踐中對它進行過評估,但事實上它比ASPX引擎更具挑戰性,是誘導開關最引人注目的特徵。我只希望它能更好地自動格式化。事實上,它將得到Intellisense的支持並與MVC一起交付,這使其成爲啓動新項目的自然選擇。在我進行切換之前,我會在一個小型項目上公平地採取行動。僅僅通過閱讀文章,我沒有看到任何我無法做到的事情,我現在正在用ASPX引擎做。

更新:我一直在使用Razor一年多,並且永遠不會回到ASPX引擎。語法看起來非常自然和富有表現力。

+0

你有沒有考慮過使用Spark?有關Spark提供的其他功能列表,請參閱queen3的答案。 – Ryan 2010-07-04 23:34:17

+1

不幸的是,Spark智能感知支持並不是很好(特別是在VS2010中),這對許多開發者來說可能是一個阻礙。但支持正在開發,所以希望事情會得到改善。 – queen3 2010-07-05 10:07:21

+1

我覺得如果你需要Intellisense,你覺得你太複雜了。當然,我的視圖的90%內容看起來像'!{Html.EditTemplateFor(x => x.Quantity)}',所以我只需要知道一些關鍵的幫助器方法和我的視圖模型的屬性。我認爲Intellisense的缺乏實際上幫助我將事情簡單化。 – Ryan 2010-07-09 14:02:57

0

除了更乾淨的外觀,佈局部分的靈活性看起來非常好,並且聲明式HTML幫助程序看起來非常有用。到目前爲止,沒有看到使用它的任何缺點,但當然必須在實踐中嘗試一下。

23

單元測試:新的視圖引擎 實施將支持 能力進行單元測試的看法(不 需要一個控制器或網絡服務器, 並且可以在任何單元測試 項目主辦 - 沒有特殊的應用 - 需要域 )。

最後!!!簡直不敢相信微軟用了將近8年的時間才終於推出了支持這一功能的視圖引擎。

0

剃刀使用方括號,也就是foreach的東西。 Spark在此使用XML標記。

因此,Spark完全支持每個XML處理器對視圖文件的解析和分析。

Mabye這不是一件大事,但顯示了一致性和可擴展性。

+0

這就是我喜歡的部分火花... – 2010-11-15 07:42:35

15

對我來說有三個令人信服的理由:

  1. 編譯 - 剃刀視圖可以被編譯成一個DLL。最後,我們在.NET Web項目中獲得了適當的可重用性。我可以有一個業務對象,知道如何顯示自己,而不會將該代碼作爲.ascx文件在Web項目的某個部分中浮動。

  2. 可測性 - 因爲它被編譯爲一個類,所以我可以編寫一個單元測試並拋出對象的模擬實例,以查看HTML是否正確。

  3. 智能感知簡潔的語法都不錯,但不是最重要的部分。

+0

你有更多的信息在'彙編'在你的項目符號點?鏈接,也許?提前致謝。 – Buildstarted 2010-07-27 15:55:28

+0

是的,在ScottGu的關於Razor的博客文章的評論中提到了對類庫的支持計劃: http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx# 7553475 Quote: 「re:介紹」Razor「 - 一個新的ASP視圖引擎。NET 2010年7月3日星期六下午12:14作者ScottGu @Chris, > 1)這些可以預編譯或作爲資源嵌入到程序集中嗎? 是的 - 這是我們希望在帖子中沒有提到的事情之一。我們計劃讓您將它們添加到類庫項目中並將它們編譯爲程序集。 ... ScottGu「 – Quango 2010-07-28 16:01:11

+0

啊,難怪我沒有看到它......總是對他的帖子發表數百萬條評論:)謝謝 – Buildstarted 2010-07-28 19:35:49