From 4cbda551bc38dc2b2a98d395644afb25aea14d4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AD=A6=E6=B6=B5?= <463023604@qq.com> Date: Wed, 31 Dec 2025 16:34:20 +0800 Subject: [PATCH 1/5] =?UTF-8?q?06=20=E9=99=88=E5=AD=A6=E6=B6=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20251229 MVC \347\254\224\350\256\260.md" | 120 ++++++++++++++++++ .../20251231 MVC \347\254\224\350\256\260.md" | 40 ++++++ 2 files changed, 160 insertions(+) create mode 100644 "\351\231\210\345\255\246\346\266\265/20251229 MVC \347\254\224\350\256\260.md" create mode 100644 "\351\231\210\345\255\246\346\266\265/20251231 MVC \347\254\224\350\256\260.md" diff --git "a/\351\231\210\345\255\246\346\266\265/20251229 MVC \347\254\224\350\256\260.md" "b/\351\231\210\345\255\246\346\266\265/20251229 MVC \347\254\224\350\256\260.md" new file mode 100644 index 0000000..7f24062 --- /dev/null +++ "b/\351\231\210\345\255\246\346\266\265/20251229 MVC \347\254\224\350\256\260.md" @@ -0,0 +1,120 @@ +# 20251229 + +## 笔记 +- 3.1 为什么使用命令行? + - 更灵活:可以在任何目录创建项目 + - 更透明:了解项目创建的每一个步骤 + - 技能通用:命令行技能在其他开发中也会用到 + +- 3.2 创建项目步骤 + + - 步骤1:打开终端 + - Windows: 按Win+R,输入`cmd`或使用PowerShell + - Mac/Linux: 打开Terminal + + - 步骤2:创建项目目录并进入 + ```bash + mkdir StudentManagementSystem + cd StudentManagementSystem + ``` + + - 步骤3:创建MVC项目 + ```bash + dotnet new mvc -n StudentManagementSystem + ``` + + - 步骤4:用VSCode打开项目 + ```bash + code . + ``` +- 3.3 项目结构(项目创建成功后,在VSCode中查看项目结构:) + ``` + StudentManagementSystem/ + │ + ├── Properties/ + │ └── launchSettings.json # 项目启动配置 + │ + ├── wwwroot/ # 静态资源文件夹(CSS、JS、图片) + │ ├── css/ + │ ├── js/ + │ └── lib/ # Bootstrap、jQuery等库 + │ + ├── Controllers/ # 控制器文件夹(先学这个!) + │ └── HomeController.cs # 默认的Home控制器 + │ + ├── Views/ # 视图文件夹(然后学这个!) + │ ├── Home/ # Home控制器对应的视图 + │ │ ├── Index.cshtml # 首页视图 + │ │ └── Privacy.cshtml # 隐私页视图 + │ ├── Shared/ # 共享视图 + │ │ ├── _Layout.cshtml # 布局页(母版页) + │ │ └── _ValidationScriptsPartial.cshtml + │ └── _ViewStart.cshtml # 视图启动文件 + │ + ├── Models/ # 模型文件夹(最后学这个!) + │ └── (暂时为空) + │ + ├── Program.cs # 程序入口(ASP.NET Core 6+) + ├── appsettings.json # 应用程序配置 + └── StudentManagementSystem.csproj # 项目文件 + ``` +- 重要文件说明: + + 1. **Program.cs** - 应用程序的入口点(ASP.NET Core 6+的简化模板) + ```csharp + var builder = WebApplication.CreateBuilder(args); + + // 添加服务到容器 + builder.Services.AddControllersWithViews(); // 注册MVC服务 + + var app = builder.Build(); + + // 配置HTTP请求管道 + if (!app.Environment.IsDevelopment()) + { + app.UseExceptionHandler("/Home/Error"); + app.UseHsts(); // 使用HTTP严格传输安全协议 + } + + app.UseHttpsRedirection(); // 重定向HTTP到HTTPS + app.UseStaticFiles(); // 启用静态文件服务(wwwroot文件夹) + app.UseRouting(); // 启用路由 + app.UseAuthorization(); // 启用授权 + + // 配置默认路由 + app.MapControllerRoute( + name: "default", + pattern: "{controller=Home}/{action=Index}/{id?}"); // 默认访问Home/Index + + app.Run(); // 运行应用 + ``` + + 2. **HomeController.cs** - 第一个控制器(下一章重点学习) + ```csharp + using Microsoft.AspNetCore.Mvc; + + namespace StudentManagementSystem.Controllers + { + public class HomeController : Controller // 继承Controller基类 + { + private readonly ILogger _logger; + + public HomeController(ILogger logger) + { + _logger = logger; + } + + // 动作方法:处理首页请求 + public IActionResult Index() + { + return View(); // 返回Views/Home/Index.cshtml + } + + // 动作方法:处理隐私页请求 + public IActionResult Privacy() + { + return View(); // 返回Views/Home/Privacy.cshtml + } + } + } + ``` \ No newline at end of file diff --git "a/\351\231\210\345\255\246\346\266\265/20251231 MVC \347\254\224\350\256\260.md" "b/\351\231\210\345\255\246\346\266\265/20251231 MVC \347\254\224\350\256\260.md" new file mode 100644 index 0000000..f3e5274 --- /dev/null +++ "b/\351\231\210\345\255\246\346\266\265/20251231 MVC \347\254\224\350\256\260.md" @@ -0,0 +1,40 @@ +# 20251229 + +## 笔记 +- 核心任务 + - 创建 `StudentController`,添加 `Index` 动作方法,使用模拟学生数据,并通过视图展示学生列表。 + +- 1.2 控制器的命名规范 + - 名称必须以 `Controller` 结尾(如 `StudentController`) + - 通常放在 `Controllers` 文件夹中 + - 继承 `Microsoft.AspNetCore.Mvc.Controller` 类 + + ```csharp + // 正确的命名 + public class StudentController : Controller + + // 错误的命名(不会自动识别为控制器) + public class StudentManager : Controller + ``` +- 2.2 动作方法的返回类型 + + | 返回类型 | 作用 | 示例 | + |----------|------|------| + | `ViewResult` | 返回视图 | `return View();` | + | `JsonResult` | 返回JSON数据 | `return Json(data);` | + | `ContentResult` | 返回纯文本 | `return Content("Hello");` | + | `RedirectResult` | 重定向到其他URL | `return Redirect("/Home");` | + | `FileResult` | 返回文件 | `return File(bytes, "image/png");` | + +- 2.3 创建控制器的两种方式 + + - 方式1:使用VSCode手动创建- + 1. 在 `Controllers` 文件夹右键 → 新建文件 + 2. 命名为 `StudentController.cs` + 3. 输入控制器代码 + + - 方式2:使用命令行工具 + ```bash + # 在项目根目录运行 + dotnet aspnet-codegenerator controller -name StudentController -m Student -dc ApplicationDbContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries + ``` \ No newline at end of file -- Gitee From 17956113ee3ebbb356ff649868758331573366ca Mon Sep 17 00:00:00 2001 From: unknown <463023604@qq.com> Date: Mon, 5 Jan 2026 16:19:56 +0800 Subject: [PATCH 2/5] =?UTF-8?q?06=20=E9=99=88=E5=AD=A6=E6=B6=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20260104 MVC \347\254\224\350\256\260.md" | 19 +++++++++++ .../20260105 MVC \347\254\224\350\256\260.md" | 32 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 "\351\231\210\345\255\246\346\266\265/20260104 MVC \347\254\224\350\256\260.md" create mode 100644 "\351\231\210\345\255\246\346\266\265/20260105 MVC \347\254\224\350\256\260.md" diff --git "a/\351\231\210\345\255\246\346\266\265/20260104 MVC \347\254\224\350\256\260.md" "b/\351\231\210\345\255\246\346\266\265/20260104 MVC \347\254\224\350\256\260.md" new file mode 100644 index 0000000..da963be --- /dev/null +++ "b/\351\231\210\345\255\246\346\266\265/20260104 MVC \347\254\224\350\256\260.md" @@ -0,0 +1,19 @@ +# 20260104 + +## 笔记 + +- MVC 中,路由是控制器的 “地址簿”: + - 前端发起请求(如 http://localhost:5000/users) + - 框架(如 Flask)根据路由规则,匹配到对应的控制器方法(如 list_users) + - 控制器方法处理逻辑后返回响应 + +- 如何弄一个路由(在 Program.cs 中配置): + ``` + app.MapControllerRoute( + name: "default", + pattern: "{controller=Home}/{action=Index}/{id?}"); + 路由器模版解释: + {controller}:控制器名(去掉Controller后缀) + {action}:动作方法名 + {id?}:可选参数,? 表示可选 + ``` \ No newline at end of file diff --git "a/\351\231\210\345\255\246\346\266\265/20260105 MVC \347\254\224\350\256\260.md" "b/\351\231\210\345\255\246\346\266\265/20260105 MVC \347\254\224\350\256\260.md" new file mode 100644 index 0000000..dc24c73 --- /dev/null +++ "b/\351\231\210\345\255\246\346\266\265/20260105 MVC \347\254\224\350\256\260.md" @@ -0,0 +1,32 @@ +# 20260105 + +## 笔记 + +1. 部分视图和视图组件有什么区别? +区别: + - 部分视图:只包含HTML片段,没有业务逻辑 + - 视图组件:包含HTML和业务逻辑,更独立 + +- 选择建议: + - 简单重用HTML片段 → 部分视图 + - 需要业务逻辑的独立组件 → 视图组件 + +2. Razor语法中的 @ 符号什么时候用? + - 使用场景: + - @ 后接C#表达式 → 直接输出值 + - @{ } → 多行C#代码块 + - @: → 在代码块中输出文本 + - @* *@ → Razor注释 +3. 如何优化视图性能? + - 优化建议: + - 使用部分视图缓存:@await Html.PartialAsync("_Partial", Model, ViewData) + - 避免在视图中执行复杂逻辑 + - 使用客户端渲染减轻服务器压力 + - 压缩和合并CSS/JS文件 + +4. Tag Helpers不生效怎么办? + - 检查步骤: + - 确保 _ViewImports.cshtml 中有 @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers + - 检查Tag Helper语法是否正确 + - 查看生成的HTML源代码,确认是否正确转换 + - 重启应用清除缓存 \ No newline at end of file -- Gitee From 1a24061067ddbd86c55249a9219678b86c48d347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AD=A6=E6=B6=B5?= <463023604@qq.com> Date: Wed, 7 Jan 2026 17:08:40 +0800 Subject: [PATCH 3/5] 06 --- ...10\266\345\231\250 \347\254\224\350\256\260.md" | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 "\351\231\210\345\255\246\346\266\265/20260107 MVC \346\216\247\345\210\266\345\231\250 \347\254\224\350\256\260.md" diff --git "a/\351\231\210\345\255\246\346\266\265/20260107 MVC \346\216\247\345\210\266\345\231\250 \347\254\224\350\256\260.md" "b/\351\231\210\345\255\246\346\266\265/20260107 MVC \346\216\247\345\210\266\345\231\250 \347\254\224\350\256\260.md" new file mode 100644 index 0000000..d48007f --- /dev/null +++ "b/\351\231\210\345\255\246\346\266\265/20260107 MVC \346\216\247\345\210\266\345\231\250 \347\254\224\350\256\260.md" @@ -0,0 +1,14 @@ +# 20260107 + +## 笔记 +- action 方法 方法返回视图(要求在Views目录中存在和控制器,名称同名的目录下,存在和方法名同名的视图文件) + - Views / [控制器名(去掉Controller后缀)] + - [Action方法名].cshtml (或 .html/.jsp 等) + +- 从控制器向视图传递数据,有三种: + 1. ViewData + 2. ViewBag + 3. 强类型数据 + - 定义一个数据类型Girl + - 创造很多个Girl对象 + - 将很多个Girl传递到视图 -- Gitee From 6c7f1e2aa473a6296b287bf0c93751071a6e35d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AD=A6=E6=B6=B5?= <463023604@qq.com> Date: Thu, 8 Jan 2026 10:53:41 +0800 Subject: [PATCH 4/5] 06 --- ...0\345\247\213 \347\254\224\350\256\260.md" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 "\351\231\210\345\255\246\346\266\265/20260108 MVC \344\273\216\345\244\264\345\274\200\345\247\213 \347\254\224\350\256\260.md" diff --git "a/\351\231\210\345\255\246\346\266\265/20260108 MVC \344\273\216\345\244\264\345\274\200\345\247\213 \347\254\224\350\256\260.md" "b/\351\231\210\345\255\246\346\266\265/20260108 MVC \344\273\216\345\244\264\345\274\200\345\247\213 \347\254\224\350\256\260.md" new file mode 100644 index 0000000..bf37b1d --- /dev/null +++ "b/\351\231\210\345\255\246\346\266\265/20260108 MVC \344\273\216\345\244\264\345\274\200\345\247\213 \347\254\224\350\256\260.md" @@ -0,0 +1,22 @@ +# 20260108 + +## 笔记 +- 新建mvc应用 + - dotnet new mvc -n 名称(在C#应用内,几乎所有标识符都用首字母大写); +- 搞定控制器 + - 在Controllers目录下,新建文件,命名通常为:XXXController.cs + - 控制器本质上一个类型 + - 定义一个类型,通常需要写好命名空间(注意取值) + - 然后使用`public class XXXcontroller` + - 需要使用原来定义的控制器功能,需要继承`Controller`类型(`Controller`类型的命名空间位于:`Microsoft.AspNetCore.Mvc`) + +## 控制器方法(默认页) +- 控制器中新建一个普通方法 +- 放回类型制定为`IActionResult` +- 方法内部的最后返回视图:`return View();` + +## 搞定视图 +- 控制器向视图传递数据是那种方法 + - `ViewData` + - `ViewBag` + - `强类型语法` -- Gitee From 3d93c4ddfb2b0a7659ddb47ad5fdf71d35430c1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AD=A6=E6=B6=B5?= <463023604@qq.com> Date: Fri, 9 Jan 2026 16:55:45 +0800 Subject: [PATCH 5/5] 06 --- ...6\345\233\276 \347\254\224\350\256\260.md" | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 "\351\231\210\345\255\246\346\266\265/20260109 MVC \350\247\206\345\233\276 \347\254\224\350\256\260.md" diff --git "a/\351\231\210\345\255\246\346\266\265/20260109 MVC \350\247\206\345\233\276 \347\254\224\350\256\260.md" "b/\351\231\210\345\255\246\346\266\265/20260109 MVC \350\247\206\345\233\276 \347\254\224\350\256\260.md" new file mode 100644 index 0000000..1e0f4ac --- /dev/null +++ "b/\351\231\210\345\255\246\346\266\265/20260109 MVC \350\247\206\345\233\276 \347\254\224\350\256\260.md" @@ -0,0 +1,83 @@ +# 20260109 +## 笔记 +1. Razor + - 表达式(自动HTML编码) + - `

欢迎,@name!

` + - `

学生总数:@count

` + - `

当前时间:@DateTime.Now.ToString("yyyy-MM-dd")

` + + - 显式表达式(不自动编码) + - `

HTML内容:@Html.Raw("加粗文本")

` +2. Razor指令 +- 指定模型类型 + ``` + @model StudentManagementSystem.Models.Student + ``` + +- 使用命名空间 + ``` + @using StudentManagementSystem.Models + ``` + +- 设置布局页 + ``` + @{ + Layout = "_Layout"; + } + ``` + +- 设置ViewData + ``` + @{ + ViewData["Title"] = "学生详情"; + ViewBag.PageName = "Student Details"; + } + ``` +3. 控制结构 +- 条件语句 + ``` + @if (Model.Age >= 18) + { + 成年 + } + else + { + 未成年 + } + ``` + +- 循环语句 + - foreach + ``` + @foreach (var student in Model.Students) + { + + @student.Name + @student.Age + + } + ``` + + - for循环 + ``` + @for (int i = 0; i < 10; i++) + { +

项目 @i

+ } + ``` + + - switch语句 + ``` + @switch (Model.Status) + { + case "Active": + ● 活跃 + break; + case "Inactive": + ● 不活跃 + break; + default: + ● 未知 + break; + } + ``` \ No newline at end of file -- Gitee