ASP.NET/MVC编程模型及其目录结构
外观
< ASP.NET
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的基类。