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的基类。