[食譜好菜] ASP.NET Core MVC 新增 Areas(區域)

Visual Studio 2019 v16.4.5ASP.NET Core MVC 專案上,按右鍵移到「加入」是看不到「區域」這個選項的。

所以 Areas(區域)得要自己手動加了,這邊就記錄一下手動新增 Areas 的步驟。

新增 Areas 資料夾

先在專案上按右鍵移到「加入」,點擊「新增資料夾」,建立名稱為 Areas 的資料夾。

依照特定結構新增 Area

接下來,假定我要新增 Admin 這個 Area,我就依照下面這個特定的結構把資料夾建起來。

  • [ASP.NET Core MVC 專案]
    • Areas
      • [Area Name]
        • Controllers
        • Models
        • Views
          • Shared

或者,也可以在 Areas 資料夾上按右鍵,移到「加入」,選擇「區域」,輸入 Area 名稱後就會幫我們產生好資料夾。

新增 Controller

在新增好的 Controllers 資料夾按右鍵移到「加入」,點擊「控制器」。

選擇自己想要的 Controller 類型後,就輸入 Controller 的名稱。

在 Controller 標記 AreaAttribute

在剛剛新增的 Controller 上標記 AreaAttribute, 這個步驟相當重要,要讓 ASP.NET Core MVC 知道 Controller 是隸屬於哪一個 Area?

設定慣例路由

建議一定要設定慣例路由,避免找不到沒有指定屬性路由的 Action,在 Startup.csapp.UseEndpoints() 裡面加入下面這段程式碼:

endpoints.MapControllerRoute(
    name: "areas",
    pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");

將共用的 _ViewStart.cshtml 及 _ViewImports.cshtml 搬到根目錄

最後是將專案範本產生的 _ViewStart.cshtml 及 _ViewImports.cshtml 搬到應用程式的根目錄,如果不做這個動作,我們會發現 Area 裡面的 View 預設會套不到 _Layout。

到這邊 Area 算是新增完成了,那麼我們就把網站跑起來,看看剛剛新增的 Area 有沒有 Work?

2020-05-01 補充

感謝白大在留言區提醒告知,在「加入」->「新增 Scaffold 項目」中,就有一個「MVC 區域」可以選,而且從無到有幫我們建立一個 Area。

參考資料

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學