[ASP.NET Core] 為專案加上 Area

為專案加上 Area

在 .NetCore 也有Area可以使用,使用方式與 .NetFramerwork 頗類似,不過也有些差異


建立一個 Area 的 Controller

  • 需要加上 attribute [Area]
[Area("My")]
public class UserController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}

建立對應的 View

  • 會建立在 Area 底下
@{
    ViewBag.Title = "title";
}

<h2>My-User-Index</h2>

調整Startup上的路由

app.UseEndpoints(endpoints =>
{
    endpoints.MapAreaControllerRoute(name: "My", areaName:"My",
        pattern: "My/{controller}/{action}");
        
    endpoints.MapControllerRoute(name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

我在 _Layout 加上一條 該頁面的link

<li class="nav-item">
    <a class="nav-link text-dark" asp-area="My" asp-controller="User" asp-action="Index">My</a>
</li>

Run 起來後會發現Area的View沒有吃到_Layout,這邊有幾種做法

  1. 把 _ViewImports.cshtml 和 _ViewStart.cshtml 直接拉到專案的根目錄

  2. 為 Area 建立獨立的設定和 _Layout.cshtml

  3. 讓 Area 取得外層的 Views/Shared/_Layout.cshtml

    • 跟第二種只差在有沒有獨立的 _Layout.cshtml