From 1a76ccd15a32f8595b35cc321fdb17091b99f6dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=87=AF=E7=82=98?= <344917204@qq.com> Date: Sun, 4 Jan 2026 23:40:55 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=BC=A0=E5=87=AF=E7=82=9807?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20251229-mvc.md" | 51 ++++++++++++ .../20251231-mvc.md" | 41 ++++++++++ .../20260104-mvc.md" | 78 +++++++++++++++++++ 3 files changed, 170 insertions(+) create mode 100644 "\345\274\240\345\207\257\347\202\230/20251229-mvc.md" create mode 100644 "\345\274\240\345\207\257\347\202\230/20251231-mvc.md" create mode 100644 "\345\274\240\345\207\257\347\202\230/20260104-mvc.md" diff --git "a/\345\274\240\345\207\257\347\202\230/20251229-mvc.md" "b/\345\274\240\345\207\257\347\202\230/20251229-mvc.md" new file mode 100644 index 0000000..a77942f --- /dev/null +++ "b/\345\274\240\345\207\257\347\202\230/20251229-mvc.md" @@ -0,0 +1,51 @@ +## 学习笔记 + +说明:本笔记用通俗语言整理ASP.NET Core MVC的核心学习内容,方便快速理解和查阅。 + +# 一、第一步:搭好开发环境 + +## 学习目标 + +搞懂ASP.NET Core MVC的基本概念和框架,用VSCode搭好开发环境,创建并能运行第一个MVC项目;知道项目的基本结构。 + +# 二、核心知识点 + +## 1. ASP.NET Core 是什么? + +它是一个做网站/应用的框架,核心优点: + +① 跨平台(Windows、Mac、Linux都能用);② 运行快,比老版本的ASP.NET好用;③ 免费开源,有很多人维护更新;④ 可按需选择功能,不冗余;⑤ 推荐用.NET 8版本,稳定又好用。 + +## 2. MVC 模式:按 C→V→M 顺序学 + +MVC是一种软件设计思路,把功能分成三部分,学习顺序先控制器、再视图、最后模型: + +① 控制器(C):像“服务员”,接收用户的请求,协调其他部分,再把结果返回;② 视图(V):像“网页设计师”,决定页面长什么样,用专门的语法展示数据,生成网页给浏览器;③ 模型(M):像“数据库管理员”,负责存数据、定义数据规则、处理业务相关的逻辑。 + +# 三、怎么用命令创建MVC项目? + +## 1. 为什么用命令行? + +灵活(随便哪个文件夹都能建)、清楚(知道项目是怎么一步步建出来的)、实用(这个技能在其他开发里也能用)。 + +## 2. 具体步骤 + +① 打开终端:Windows按Win+R输cmd/PowerShell,Mac/Linux打开Terminal;② 创建并进入项目文件夹:输入“mkdir 文件夹名”(比如StudentManagementSystem),再输“cd 文件夹名”进入;③ 创建MVC项目:输入“dotnet new mvc -n 项目名”(和文件夹名一致即可);④ 用VSCode打开:输入“code .”。 + +## 3. 项目结构和关键文件 + +① 核心文件夹:Controllers(放控制器,比如默认的HomeController)、Views(放网页相关文件,对应控制器的网页和共享网页)、Models(放数据相关的内容,初始为空)、wwwroot(放CSS、JS、图片等静态文件)、Properties(项目启动配置);② 关键文件:Program.cs(程序入口,负责配置功能和运行流程)、appsettings.json(应用的配置信息)、项目名.csproj(项目的核心配置文件);③ 重点说明:Program.cs是程序启动的关键,会配置需要的功能、构建运行流程、监听端口;HomeController里有处理请求的方法,会对应返回指定的网页。 + +# 四、怎么运行和调试项目? + +## 1. 两种运行方式 + +① 命令行:输入“dotnet run”,启动后按住Ctrl点击终端里的链接(比如https://localhost:7126)就能打开网页;② VSCode配置:按F5或点击“运行和调试”,选择“.NET Core”,会自动生成配置文件,直接启动即可。 + +## 2. 调试小技巧 + +① 设断点:在代码行号左边点一下,出现红点就是断点;② 启动调试:按F5;③ 一步步执行:按F10(不进方法内部)、F11(进方法内部);④ 看变量:把鼠标放在变量上,或查看“变量”面板。 + +## 3. 项目运行流程 + +输入“dotnet run”→ 加载Program.cs配置功能和运行流程 → 监听端口(比如5000、5001)→ 浏览器访问链接(比如https://localhost:5001)→ 请求经过运行流程 → 匹配到HomeController的处理方法 → 返回对应的网页 → 浏览器显示页面。 \ No newline at end of file diff --git "a/\345\274\240\345\207\257\347\202\230/20251231-mvc.md" "b/\345\274\240\345\207\257\347\202\230/20251231-mvc.md" new file mode 100644 index 0000000..d3b950e --- /dev/null +++ "b/\345\274\240\345\207\257\347\202\230/20251231-mvc.md" @@ -0,0 +1,41 @@ +## 笔记 + +接收请求:捕获用户的 HTTP 请求(如 GET/POST、参数、Cookie 等) +分发逻辑:调用对应的 Model 层处理数据(查 / 增 / 删 / 改) +返回响应:将处理结果传递给 View 层渲染,或直接返回 JSON / 重定向 +### 控制器规范 +``` +控制器的命名规范 +名称必须以 Controller 结尾(如 StudentController) +通常放在 Controllers 文件夹中 +继承 Microsoft.AspNetCore.Mvc.Controller 类 +// 正确的命名 +public class StudentController : Controller + +// 错误的命名(不会自动识别为控制器) +public class StudentManager : Controller +1.3 控制器的生命周期 +HTTP请求 → 路由系统 → 找到对应控制器 → 创建控制器实例 → +调用动作方法 → 返回结果 → 销毁控制器实例 +``` +### 如何创建控制器 +``` + 什么是动作方法(Action Method)? +控制器中的公共方法(public method) +通常返回 IActionResult 或其派生类型 +每个动作方法对应一个用户可访问的URL +public class StudentController : Controller +{ + // 动作方法:显示学生列表 + public IActionResult Index() + { + return View(); // 返回视图 + } + + // 动作方法:显示学生详情 + public IActionResult Details(int id) + { + // 处理逻辑 + return View(); + } +} \ No newline at end of file diff --git "a/\345\274\240\345\207\257\347\202\230/20260104-mvc.md" "b/\345\274\240\345\207\257\347\202\230/20260104-mvc.md" new file mode 100644 index 0000000..f7a6a14 --- /dev/null +++ "b/\345\274\240\345\207\257\347\202\230/20260104-mvc.md" @@ -0,0 +1,78 @@ +## 笔记 +控制器的桥梁作用:强调控制器连接用户请求、模型数据和视图显示 +动作方法对应URL:让学生理解URL与控制器方法的对应关系 +数据传递方式选择:讲解三种方式的适用场景,强调强类型模型的优势 +路由配置的重要性:演示不同URL如何映射到不同控制器方法 +## 练习 +- 1. 练习1 +- 源代码 +``` + +@{ + ViewData["Title"] = "学生列表(分页)"; + // 从ViewBag获取分页参数 + int currentPage = ViewBag.CurrentPage; + int pageSize = ViewBag.PageSize; + int totalPages = ViewBag.TotalPages; + int totalCount = ViewBag.TotalCount; +} + +

学生列表

+

总数据量:@totalCount 条 | 每页@pageSize 条 | 共@totalPages 页 | 当前第@currentPage 页

+ + + + + + + + + + + + + @foreach (var student in Model) + { + + + + + + + } + +
ID姓名专业年龄
@student.Id@student.Name@student.Major@student.Age
+ + + + + + +s \ No newline at end of file -- Gitee From 2374834fdeaa22b30cc8947f5745ac3226208e45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=87=AF=E7=82=98?= <344917204@qq.com> Date: Sun, 11 Jan 2026 19:57:31 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=BC=A0=E5=87=AF=E7=82=9807?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...00\345\217\221\347\216\257\345\242\203.md" | 0 ...vc\346\216\247\345\210\266\345\231\250.md" | 0 .../20260104-mvc\350\267\257\347\224\261.md" | 0 .../20260105-mvc\345\207\272\345\205\245.md" | 18 ++++++++++ ...vc\346\216\247\345\210\266\345\231\250.md" | 36 +++++++++++++++++++ .../20260108-mvc\350\247\206\345\233\276.md" | 20 +++++++++++ .../20260109-mvc\346\250\241\345\236\213.md" | 26 ++++++++++++++ 7 files changed, 100 insertions(+) rename "\345\274\240\345\207\257\347\202\230/20251229-mvc.md" => "\345\274\240\345\207\257\347\202\230/20251229-mvc\345\274\200\345\217\221\347\216\257\345\242\203.md" (100%) rename "\345\274\240\345\207\257\347\202\230/20251231-mvc.md" => "\345\274\240\345\207\257\347\202\230/20251231-mvc\346\216\247\345\210\266\345\231\250.md" (100%) rename "\345\274\240\345\207\257\347\202\230/20260104-mvc.md" => "\345\274\240\345\207\257\347\202\230/20260104-mvc\350\267\257\347\224\261.md" (100%) create mode 100644 "\345\274\240\345\207\257\347\202\230/20260105-mvc\345\207\272\345\205\245.md" create mode 100644 "\345\274\240\345\207\257\347\202\230/20260107-mvc\346\216\247\345\210\266\345\231\250.md" create mode 100644 "\345\274\240\345\207\257\347\202\230/20260108-mvc\350\247\206\345\233\276.md" create mode 100644 "\345\274\240\345\207\257\347\202\230/20260109-mvc\346\250\241\345\236\213.md" diff --git "a/\345\274\240\345\207\257\347\202\230/20251229-mvc.md" "b/\345\274\240\345\207\257\347\202\230/20251229-mvc\345\274\200\345\217\221\347\216\257\345\242\203.md" similarity index 100% rename from "\345\274\240\345\207\257\347\202\230/20251229-mvc.md" rename to "\345\274\240\345\207\257\347\202\230/20251229-mvc\345\274\200\345\217\221\347\216\257\345\242\203.md" diff --git "a/\345\274\240\345\207\257\347\202\230/20251231-mvc.md" "b/\345\274\240\345\207\257\347\202\230/20251231-mvc\346\216\247\345\210\266\345\231\250.md" similarity index 100% rename from "\345\274\240\345\207\257\347\202\230/20251231-mvc.md" rename to "\345\274\240\345\207\257\347\202\230/20251231-mvc\346\216\247\345\210\266\345\231\250.md" diff --git "a/\345\274\240\345\207\257\347\202\230/20260104-mvc.md" "b/\345\274\240\345\207\257\347\202\230/20260104-mvc\350\267\257\347\224\261.md" similarity index 100% rename from "\345\274\240\345\207\257\347\202\230/20260104-mvc.md" rename to "\345\274\240\345\207\257\347\202\230/20260104-mvc\350\267\257\347\224\261.md" diff --git "a/\345\274\240\345\207\257\347\202\230/20260105-mvc\345\207\272\345\205\245.md" "b/\345\274\240\345\207\257\347\202\230/20260105-mvc\345\207\272\345\205\245.md" new file mode 100644 index 0000000..4d7bd27 --- /dev/null +++ "b/\345\274\240\345\207\257\347\202\230/20260105-mvc\345\207\272\345\205\245.md" @@ -0,0 +1,18 @@ +## 笔记 + +1. 部分视图和视图组件有什么区别? +区别: + - 部分视图:只包含HTML片段,没有业务逻辑 + - 视图组件:包含HTML和业务逻辑,更独立 + +- 选择建议: + - 简单重用HTML片段 → 部分视图 + - 需要业务逻辑的独立组件 → 视图组件 +**工作流程**: + +1. 用户通过View交互 +2. Controller接收请求 +3. Controller调用Model处理业务 +4. Model更新数据并返回结果 +5. Controller将结果传递给View +6. View更新界面展示 \ No newline at end of file diff --git "a/\345\274\240\345\207\257\347\202\230/20260107-mvc\346\216\247\345\210\266\345\231\250.md" "b/\345\274\240\345\207\257\347\202\230/20260107-mvc\346\216\247\345\210\266\345\231\250.md" new file mode 100644 index 0000000..71af8a6 --- /dev/null +++ "b/\345\274\240\345\207\257\347\202\230/20260107-mvc\346\216\247\345\210\266\345\231\250.md" @@ -0,0 +1,36 @@ +## 笔记 + +**控制器是MVC的协调中心**,接收用户请求,协调模型和视图完成响应。 + +**核心职责:** + +1. **请求处理**:接收并验证用户输入 +2. **业务协调**:调用模型执行业务逻辑 +3. **数据传递**:将处理结果传递给视图 +4. **流程控制**:决定下一步显示哪个视图 + +**设计原则:** + +- 保持“瘦控制器”,业务逻辑应放在模型中 +- 单一职责,每个控制器方法专注一个功能 +- 避免直接在控制器中操作数据库 +- 将数据验证委托给模型或专门的验证器 + +**典型工作流:** +用户请求 → 路由解析 → 控制器方法 → 调用模型 → 返回结果 → 渲染视图 + +**示例(伪代码):** + +```java +public class UserController { + public ActionResult Login(LoginRequest request) { + var user = userModel.Validate(request); // 调用模型 + if(user != null) { + return View("Dashboard", user); // 传递数据到视图 + } + return View("LoginError"); + } +} +``` + +控制器是MVC的“交通警察”,应专注流程控制而非业务实现。 \ No newline at end of file diff --git "a/\345\274\240\345\207\257\347\202\230/20260108-mvc\350\247\206\345\233\276.md" "b/\345\274\240\345\207\257\347\202\230/20260108-mvc\350\247\206\345\233\276.md" new file mode 100644 index 0000000..7cd85bf --- /dev/null +++ "b/\345\274\240\345\207\257\347\202\230/20260108-mvc\350\247\206\345\233\276.md" @@ -0,0 +1,20 @@ +## 笔记 +- 新建mvc应用 + - dotnet new mvc -n 名称(在C#应用内,几乎所有标识符都用首字母大写); +- 搞定控制器 + - 在Controllers目录下,新建文件,命名通常为:XXXController.cs + - 控制器本质上一个类型 + - 定义一个类型,通常需要写好命名空间(注意取值) + - 然后使用`public class XXXcontroller` + - 需要使用原来定义的控制器功能,需要继承`Controller`类型(`Controller`类型的命名空间位于:`Microsoft.AspNetCore.Mvc`) + +## 控制器方法(默认页) +- 控制器中新建一个普通方法 +- 放回类型制定为`IActionResult` +- 方法内部的最后返回视图:`return View();` + +## 搞定视图 +- 控制器向视图传递数据是那种方法 + - `ViewData` + - `ViewBag` + - `强类型语法` \ No newline at end of file diff --git "a/\345\274\240\345\207\257\347\202\230/20260109-mvc\346\250\241\345\236\213.md" "b/\345\274\240\345\207\257\347\202\230/20260109-mvc\346\250\241\345\236\213.md" new file mode 100644 index 0000000..d6892b5 --- /dev/null +++ "b/\345\274\240\345\207\257\347\202\230/20260109-mvc\346\250\241\345\236\213.md" @@ -0,0 +1,26 @@ +## 笔记 + +- mvc模型核心职责 +```bash + +- 数据管理: 定义数据结构、持久化操作 +- 业务逻辑:实现核心计算规则和业务流程 +- 数据验证:确保数据完整性和有效性 +- 状态管理:维护应用状态变更 + +``` + +- 示例代码 +```c# +public class UserModel { + public User ValidateLogin(string username, string password) { + var user = db.FindUser(username); + return VerifyPassword(user, password) ? user : null; + } + + public bool UpdateProfile(User user) { + return Validate(user) && db.Update(user); + } +} + +``` \ No newline at end of file -- Gitee