網頁

2013年12月6日 星期五

ASP.NET MVC - Partial View 與 Layout 的檔案名稱

其實這邊的內容是擷取「給 ASP.NET MVC 初學者 - 兩種主要 View Engine 的對照」的內容再加以補充,因為看到有太多人在 View 的檔案名稱管理上都是相當隨便,這樣在專案開發時(尤其是大型專案與多人開發的時候)將會發生管理上以及編輯效率上的問題,所以一定要正視這個原則。

如果這一點都無法作到的話,別跟我說你是在開發 ASP.NET MVC 專案,因為連這一點基本的原則都沒有堅持住的話,那麼在 View 裡面寫大量的伺服端程式或是直接讀取資料庫來做處理的各種很扯的荒唐行徑都會做得出來。

 


Layout 與 Partial View 的檔案名稱

不管是一般的 View 還是 Partial View,副檔名都是使用「cshtml」,為了可以讓開發者能夠明確辨識 cshtml 檔案是一般的 View 還是 Partial View,依照「習慣取代配置」的作法,我們會將 Partial View 的 cshtml 檔案的檔案名稱前加上「_ (底線)」,而在主版頁面則是檔案名稱的前面一樣是加上「_」並且檔名的結尾再加上「Layout」以識區別,如下所示:

image

有人會習慣在 Partial View 的檔名結尾加上「Partial」,但我是習慣不加,這就看每個人或是團隊的開發習慣或是約定為何來做決定,如果有明確想要區分的話,專案裡最好統一作法,所以要的話就是全部的 Partial View 要在字尾加上「Partial」,要不然就是都不加。

 

另外就是 Razor 的預設配置頁面,在「加入檢視」的視窗裡就可以看到提示句(如果是在 Razor _viewstart 檔案中設定,則保留為空白),如下:

SNAGHTMLc5c574

這是說如果新建立的檢視識要使用預設的配置頁面(_Layout.cshtml)的話,那就保留空白,如果要使用其他的主版頁面,就去做選擇,而預設的主版頁面會在「_ViewStart.cshtml」這個檔案裡做設定,

image

_ViewStart.cshtml 內容很簡單,如以下所示:

image

 

因為看到專案裡的其他成員對於 View 檔名不論是一般的 View 或是 Layour 還是 Partial View 檔名都是一樣的,造成在管理上的一些困難,如果你真的是很認真的開發 ASP.NET MVC 專案的人竟會謹守這樣的潛規則,但是很多人都不太明白,更有很多人抱持著「能動就好」的心態,這樣敷衍的態度就真的不太好。

在 Layout 與 Partial View 檔名前面加上底線,最大的一個原因就是要作到「區別」,讓開發人員馬上明白他們要使用的檢視是一般的 View 還是 Partial View,尤其是 Layout 的名稱最好要將字尾加上「Layout」以示區別。

用這樣的命名方式在管理上是會有很大的幫助,當專案裡的 View 檔案越來越多的時候,除了 Layout 之外,View 與 Partial View 的內容並不是可以馬上被識別的,往往都還需要追回使用端的地方看這個檢視檔案是如何被使用的之後才能清楚了解這個檢視檔案是個 View 還是 Partial View。

看看使用 VS2013 所建立的 ASP.NET MVC 網站專案,可以看到假如是屬於 Partial View 的檔案,在字首就會加上「底線」,然後在字尾的部份都會加上「Partial」來做識別。

image

 

前面已經有提過,Layout 的檔案命名在字首跟 Partial View 是一樣用「底線」,但是字首則是建議要加上「Layout」這個字,不建議加在前面,而是要加在後面,這樣 Layout 的檔案名稱才會比較合理與容易閱讀。

如果你要在專案裡加入 MiniProfiler 的話,會在 ~/Views/Shared 裡面加入「_MINIPROFILER UPDATED Layout.cshtml」這個檔案,字首用「底線」而字尾加「Layout」。

image

還有另一種情況,例如下面圖的三個 Layout 檔案命名方式,在檔案名稱的後面(副檔名之前)再加入關鍵自來輔助說明,這樣的情況也是可以讓開發者一看就能夠明白這幾個檢視檔案的內容,馬上就可以達到辨識的效果。

image

 

最後再補充一篇在 StackOverflow 的一篇討論:

Why does Razor _layout.cshtml have a leading underscore in file name?

標注最佳解答的回答者是「Mike Brind」

Awarded MVP for ASP.NET by Microsoft in 2008, 2009, 2010, 2011, 2012 and again in 2013.
Author of Beginning ASP.NET Web Pages with WebMatrix, Wiley, November 2011 [ISBN: 978-1-1180-5048-4]

http://stackoverflow.com/users/134725/mike-brind

http://www.linkedin.com/pub/mike-brind/9/369/868


另外還有

Quick View of ASP.NET MVC 3 Razor View Engine | TechBrij

_(underscore)
Files that cannot be shown by direct requests (master pages, partial views etc) have underscore (_) prefix in their names. e.g. _Layout.cshtml

 

後記:

我是個龜毛的人,有時會嚴重的吹毛求疵,在一些覺得這應該是基本的問題上會執著很久,View 檔案的命名方法就是一個例子,這並不是一個「能動就好」的問題,而是開發人員對於基本原則是否注意與遵守的問題。

台灣很多開發者,尤其是 ,NET 開發人員都不太願意接觸外界的訊息,對於資訊的掌握也都很片段,例如找尋某個程式的解決方法,很多都是看書來,更多都是直接 Google 然後複製片段到自己的專案,能跑就繼續往下開發,不能跑就繼續 Google 下一個程式範例來複製貼上,只接受片段的程式然後對於開放原始碼的整套 Solution 往往都不會去瀏覽或研究,以至於很多開發人員所寫出來的東西都與世界上的習慣寫法是完全背道而馳的。

不管怎樣,多看看整套的解決方法,尤其是 APS.NET MVC 在 CodePlex 與 GitHub 有很多 Open Source 專案可以參考,看看別人是如何開發專案的,看看程式裡的寫法,檔案命名方式,用了哪些套件,架構是怎麼做的,往往會比你去 Google 片段或是只看書裡的範例還要收穫更多。

 

以上

4 則留言:

  1. 「因為看到專案裡的其他成員對於 View 檔名不論是一般的 View 或是 Layour 還是 Partial View 檔名都是一樣的,造成在管理上的一些困難,如果你真的是很認真的開發 ASP.NET MVC 專案的人竟會謹守這樣的潛規則,但是很多人都不太明白,更有很多人抱持著「能動就好」的心態,這樣敷衍的態度就真的不太好。」


    這一段念了幾遍還是看不懂
    建議你重修國小國文
    將語句段落的表達邏輯搞清楚後再發文謝謝

    回覆刪除
    回覆
    1. 在看完您有風度的回覆後
      我為我不經思考就脫口而出的幼稚發言道歉
      另外也謝謝您的發文奉獻!

      刪除
  2. 謝謝,未來若有機會開發asp.net MVC 會記得這個規則的,感恩。

    回覆刪除