ASP.NET/MVC編程模型及其目錄結構

MVC概念

編輯

MVC (Model View Controller) 編程框架包括:

  • Model(模型)表示應用程式數據邏輯的部分。通常模型對象在數據庫中存取數據。
  • View(視圖)對數據(數據庫記錄)進行顯示
  • Controller(控制器)處理用戶交互的部分。通常控制器從視圖讀取數據、控制用戶輸入,並向模型發送數據數據。

文件結構

編輯

一個典型的 ASP.NET MVC web應用程式通常擁有如下文件夾:

  • Properties
  • Dependencies
  • App_Data 文件夾:過時。用於存儲應用程式數據(例如 App_Data 文件夾中可以添加 SQL 數據庫)
  • Content 文件夾:過時。用於靜態文件,比如樣式表(CSS 文件)、圖表和圖像。自動向項目添加標準的樣式表文件:Content 文件夾中的文件 Site.css。這個樣式表文件是您希望改變應用程式樣式時需要編輯的文件。
    • 自動向 Content 文件夾添加一個 themes 文件夾。這個 themes 文件夾存放 jQuery 樣式和圖片。
  • Controllers 文件夾:用於存儲負責處理用戶輸入和響應的控制器類。MVC 要求所有控制器文件的名稱以 "Controller" 結尾。其中HomeController.cs對應於Views的Home子文件夾。
  • Models 文件夾:包含表示應用程式模型的類。模型存有並操作應用程式的數據
  • Scripts 文件夾:過時。存儲應用程式的 JavaScript 文件。
  • Views文件夾:保存與應用程式的顯示相關的 HTML 文件(用戶界面)。Views 文件夾中含有每個控制器對於的一個文件夾。默認創建了幾個子文件夾。 根據視圖的不同需求可以@Html.Partial()、@Html.Action()方式來調用。最簡單的是使用 Html.Partial(),如果頁面需要數據交互則使用@Html.Action()。
    • Account文件夾包含用於註冊並登錄用戶帳戶的頁面
    • Home 文件夾用於存儲諸如首頁和關於頁之類的應用程式頁面
    • Shared 文件夾用於存儲控制器間分享的視圖(模板頁和佈局頁)。其中的 _ViewStart文件可以理解為其它View的基類,包含@{Layout = "~/Views/Shared/_Layout.cshtml";}這段代碼被自動添加到由應用程式顯示的所有視圖。如果刪除該文件,則必須向所有視圖添加這段代碼。
      • 文件 _Layout.cshtml 表示應用程式中每個頁面的佈局。它位於 Views 文件夾中的 Shared 文件夾(或其下的子文件夾)。_Layout.cshtml替代了古早的Site.Master。_Layout.cshtml文件中已沒有了MasterPage中<asp:ContentPlaceHolder ID="MainContent" runat="server" />的標籤語句了,取而代之的是@RenderBody():呈現子頁的主體內容或者@RenderSection(string name, bool required = true);呈現特別的節部分;作用是將視圖中的內容通過@RenderBody()方法(該方法不需要參數且只能出現一次)合併到佈局頁面中的指定位置;註釋掉之後頁面提示錯誤,尚未對佈局頁「~/views/shared/layout.cshtml」調用「renderBody」方法。required默認為true必須覆寫,設為false則為可選覆寫;
  • wwwroot:默認情況下,ASP.NET Core 應用程式中的 wwwroot 文件夾被視為 webroot 文件夾,並且此文件夾或目錄應該存在於根項目文件夾中。在 ASP.NET Core 應用程式中,靜態文件可以存儲在 webroot 文件夾下的任何文件夾中,並且可以使用該根目錄的相對路徑進行訪問。ASP.NET Core中,只有那些存在於 webroot 中的文件 - wwwroot 文件夾或其下的任何子文件夾可以通過 HTTP 請求提供服務。默認情況下,所有其他文件都被阻止並且無法提供。可以使用基本URL和文件名訪問靜態文件。為了提供靜態文件,需要在 Startup.cs文件的 'Configure()' 方法中包含app.UseStaticFiles() 中間件組件。
    • css文件夾
    • js文件夾
    • lib文件夾
    • favicon.ico
  • Global.asax配置文件:過時
  • packages.config配置文件
  • Web.config配置文件:過時
  • appsettings.json 包含了網站的配置數據,比如 數據庫的connection string;
  • Program.cs : 包含了程序的入口信息 <C#的main就在這裏>
  • Startup.cs : 包含了配置應用行為的代碼;

修改wwwroot文件夾名,需要webBuilder.UseStartup<Startup>().UseWebRoot("MyWebRoot"):

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }
 
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>().UseWebRoot("MyWebRoot");
            });
}

調用結構

編輯

Views/Home/index.cshtml是默認的頁面。引用了_Layout.cshtml。這是因為在Startup.cs中指定了默認控制器:

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

_ViewStart.cshtml是所有View的基類。