diff --git "a/\345\220\264\346\235\276\351\235\222/20251230-\346\220\255\345\273\272MVC.md" "b/\345\220\264\346\235\276\351\235\222/20251230-\346\220\255\345\273\272MVC.md" new file mode 100644 index 0000000000000000000000000000000000000000..4d0d329270f56eb7363d1f39d98761f3c01d4cf6 --- /dev/null +++ "b/\345\220\264\346\235\276\351\235\222/20251230-\346\220\255\345\273\272MVC.md" @@ -0,0 +1,33 @@ +一、什么是 MVC? + +MVC 是一种常见的软件架构设计模式,主要用于 Web 开发。它将程序分为三层,使代码结构更清晰、职责更明确,方便后期维护和扩展。 + +M(Model,模型): 负责数据相关的操作,如数据库访问、数据处理、业务逻辑等。 + +V(View,视图): 负责页面展示,将数据以页面形式呈现给用户。 + +C(Controller,控制器): 负责接收用户请求,调用 Model 处理数据,并将结果返回给 View。 + +简单来说: + +用户 → Controller → Model → Controller → View → 用户 + +二、为什么要使用 MVC? + +在没有 MVC 之前,很多项目会把代码全部写在一个文件中,导致: + +代码混乱,不易阅读 + +修改一个功能容易影响其他功能 + +不利于多人协作 + +使用 MVC 的好处: + +结构清晰,分工明确 + +降低代码耦合度 + +方便维护和扩展 + +适合团队开发 \ No newline at end of file diff --git "a/\345\220\264\346\235\276\351\235\222/20251231-MVC\346\216\247\345\210\266\345\231\250.md" "b/\345\220\264\346\235\276\351\235\222/20251231-MVC\346\216\247\345\210\266\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..28be0a47f79cb38c827795e5cda64b6c267d1058 --- /dev/null +++ "b/\345\220\264\346\235\276\351\235\222/20251231-MVC\346\216\247\345\210\266\345\231\250.md" @@ -0,0 +1,102 @@ +# MVC 控制器(Controller)基础学习笔记(二) + +## 一、什么是 Controller(控制器)? + +Controller 是 MVC 架构中的 **核心协调者**,主要负责接收用户请求,并根据请求内容调用 Model 处理业务逻辑,最后选择合适的 View 进行展示。 + +简单理解: + +> Controller 就像“中间人”,负责**接收请求 → 处理逻辑 → 返回结果**。 + +--- + +## 二、Controller 的主要作用 + +Controller 在 MVC 中主要承担以下职责: + +1. 接收用户请求(如浏览器访问、表单提交等) +2. 判断请求类型和请求内容 +3. 调用对应的 Model 处理数据 +4. 接收 Model 返回的数据结果 +5. 将数据传递给 View 进行页面展示 + +Controller **不直接操作数据库**,也 **不负责页面展示**。 + +--- + +## 三、为什么 Controller 很重要? + +如果没有 Controller,程序通常会出现以下问题: + +* 页面中直接写业务逻辑 +* 数据处理和页面展示混合在一起 +* 程序结构混乱,不利于维护 + +使用 Controller 后: + +* 请求入口统一 +* 逻辑处理集中 +* 项目结构更加清晰 + +--- + +## 四、Controller 的基本工作流程 + +Controller 的基本执行流程如下: + +1. 用户在浏览器中发起请求 +2. 请求被 Controller 接收 +3. Controller 分析请求内容 +4. Controller 调用 Model 处理业务逻辑 +5. Model 返回处理结果 +6. Controller 将结果传递给 View +7. View 生成页面返回给用户 + +--- + +## 五、Controller 的常见功能示例 + +在实际开发中,一个 Controller 通常会包含多个方法,每个方法对应一个功能,例如: + +* 用户登录处理 +* 用户注册处理 +* 查询数据列表 +* 新增、修改、删除数据 + +示例说明(逻辑示意): + +* login():处理用户登录请求 +* register():处理用户注册请求 +* list():处理数据列表展示请求 + +--- + +## 六、Controller 的命名规范 + +为了方便管理和阅读,Controller 通常遵循以下命名规则: + +* 使用 **XXXController** 命名 +* 一个 Controller 负责一类功能 + +示例: + +* UserController(用户相关操作) +* ProductController(商品相关操作) +* OrderController(订单相关操作) + +--- + +## 七、Controller 编写时的注意事项 + +1. Controller 中不要写过多复杂业务逻辑 +2. 业务处理应尽量交给 Model +3. Controller 保持简洁,职责单一 +4. 不同功能尽量拆分为不同方法 + +--- + +## 八、学习小结 + +通过本次学习,我理解了 Controller 在 MVC 架构中的作用和基本工作方式。Controller 作为连接用户请求与业务处理的重要部分,使系统结构更加清晰,也提高了程序的可维护性。 + +本篇为 **MVC 控制器(Controller)基础学习笔记**,为后续学习 Model 和 View 打下了基础。 diff --git "a/\345\220\264\346\235\276\351\235\222/20260104-MVC.md" "b/\345\220\264\346\235\276\351\235\222/20260104-MVC.md" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/\345\220\264\346\235\276\351\235\222/20260105-MVC.md" "b/\345\220\264\346\235\276\351\235\222/20260105-MVC.md" new file mode 100644 index 0000000000000000000000000000000000000000..03b30db095f2cf4daccf2b5977658f3a0fabea0a --- /dev/null +++ "b/\345\220\264\346\235\276\351\235\222/20260105-MVC.md" @@ -0,0 +1,9 @@ +**视图是MVC的展示层**,负责将数据呈现为用户界面,不包含业务逻辑。 + +**MVC工作流程**: +1. 用户通过View交互 +2. Controller接收请求 +3. Controller调用Model处理业务 +4. Model更新数据并返回结果 +5. Controller将结果传递给View +6. View更新界面展示 \ No newline at end of file diff --git "a/\345\220\264\346\235\276\351\235\222/20260107-MVC.md" "b/\345\220\264\346\235\276\351\235\222/20260107-MVC.md" new file mode 100644 index 0000000000000000000000000000000000000000..39e8936941a5f5927184a805fb83c40202f59570 --- /dev/null +++ "b/\345\220\264\346\235\276\351\235\222/20260107-MVC.md" @@ -0,0 +1,17 @@ +控制器是MVC的协调中心,接收用户请求,协调模型和视图完成响应 +### 核心职责 +**请求处理**:接收并验证用户输入 +**业务协调**:调用模型执行业务逻辑 +**数据传递**:将处理结果传递给视图 +**流程控制**:决定下一步显示哪个视图 +### 工作流 +用户请求 → 路由解析 → 控制器方法 → 调用模型 → 返回结果 → 渲染视图 + +**示例(Razor视图):** + +```html +@model User +
上次登录:@Model.LastLogin
+ +``` \ No newline at end of file diff --git "a/\345\220\264\346\235\276\351\235\222/20260108-MVC.md" "b/\345\220\264\346\235\276\351\235\222/20260108-MVC.md" new file mode 100644 index 0000000000000000000000000000000000000000..c4717e17f422fb34e659b43353c898423710f207 --- /dev/null +++ "b/\345\220\264\346\235\276\351\235\222/20260108-MVC.md" @@ -0,0 +1,5 @@ +## 视图: +**数据展示**:将模型数据渲染为HTML/UI +**用户交互**:提供表单、按钮等交互元素 +**界面结构**:定义页面布局和视觉呈现 +**数据绑定**:动态显示模型状态变化 \ No newline at end of file diff --git "a/\345\220\264\346\235\276\351\235\222/20260109-MVC.md" "b/\345\220\264\346\235\276\351\235\222/20260109-MVC.md" new file mode 100644 index 0000000000000000000000000000000000000000..64bbd0c477dabdffb0c3f940d63a63f60ee5d264 --- /dev/null +++ "b/\345\220\264\346\235\276\351\235\222/20260109-MVC.md" @@ -0,0 +1,6 @@ +## 模型: +**模型是MVC的业务核心**,封装应用数据和业务规则,独立于用户界面 +**数据管理**:定义数据结构、持久化操作 +**业务逻辑**:实现核心计算规则和业务流程 +**数据验证**:确保数据完整性和有效性 +**状态管理**:维护应用状态变更 \ No newline at end of file diff --git "a/\345\220\264\346\235\276\351\235\222/20260112-mvc\347\254\224\350\256\260.md" "b/\345\220\264\346\235\276\351\235\222/20260112-mvc\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..17889faa8ae2da0267f831bdc5c60e947d5b7f00 --- /dev/null +++ "b/\345\220\264\346\235\276\351\235\222/20260112-mvc\347\254\224\350\256\260.md" @@ -0,0 +1,38 @@ +# 笔记 +1. 路由(Routing)(路由是将URL映射到控制器的规则系统。) +- 默认路由规则(在 Program.cs 中配置): +```bash +app.MapControllerRoute( + name: "default", + pattern: "{controller=Home}/{action=Index}/{id?}"); +``` +- 路由模板解释: + - {controller}:控制器名(去掉Controller后缀) + - {action}:动作方法名 + - {id?}:可选参数,? 表示可选 + +2. 自定义路由特性 +- 可以在控制器或动作方法上使用 [Route] 特性: +```bash +[Route("api/students")] // 自定义路由 +public class StudentController : Controller +{ + [Route("")] // 对应 /api/students + public IActionResult Index() { ... } + + [Route("{id:int}")] // 对应 /api/students/5 + public IActionResult Details(int id) { ... } + + [Route("add")] // 对应 /api/students/add + public IActionResult Create() { ... } +} +``` +4 路由约束 +- 限制参数的类型和格式: +```bash +[Route("students/{id:int:min(1)}")] // id必须是大于0的整数 +public IActionResult Details(int id) { ... } + +[Route("students/{name:alpha}")] // name只能是字母 +public IActionResult Search(string name) { ... } +``` \ No newline at end of file diff --git "a/\345\220\264\346\235\276\351\235\222/20260114-mvc\345\242\236\345\212\240.md" "b/\345\220\264\346\235\276\351\235\222/20260114-mvc\345\242\236\345\212\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..0099e9a01d525fc0d7dd326859407702eb3ad1a4 --- /dev/null +++ "b/\345\220\264\346\235\276\351\235\222/20260114-mvc\345\242\236\345\212\240.md" @@ -0,0 +1,19 @@ +# 笔记 + +### 新增功能分析 + - 点击新增按钮,跳转到一个页面A + - 使用a标签代替原来的新增按钮,有如下几种方式 + - 新增 + - 新增 + - 在页面A中是一个表单,有若干表单项,有一个提交按钮,有一个取消按钮 + - + - 表单项asp-for和模型绑定 + - 点击提交时,将表单数据保存到数据库表,(成功)后跳转回列表 + - List list list.Add + - 点击取消按钮,跳转回列表页 + + + + +- 新增关键:必须做前后端双重数据校验,确保数据合法性,新增后需给用户明确的结果反馈。 +- 删除关键:优先增加确认环节防误删,推荐使用 “软删除”,删除操作必须基于唯一主键,同时处理关联数据的异常情况。 \ No newline at end of file diff --git "a/\345\220\264\346\235\276\351\235\222/20260115-mvc\347\254\224\350\256\260.md" "b/\345\220\264\346\235\276\351\235\222/20260115-mvc\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..a12e1f37aa1164c93fe3f1268455ec6b4d671e57 --- /dev/null +++ "b/\345\220\264\346\235\276\351\235\222/20260115-mvc\347\254\224\350\256\260.md" @@ -0,0 +1,15 @@ +# 笔记 + +1. 删除功能分析 + - 点击删除按钮,跳转一个页面B + - 页面B中,有提示,询问要不要删除 + - 询问要不要删除 + - 如果是,则删除后返回列表页 + - 如果不是,则直接返回列表页 + +2. 编辑功能分析 + - 点击编辑按钮,跳转一个页面C + - 在页面C中有展示表单,表单中有原来的数据 + - 在页面C中,有保存,有取消 + - 点击保存,则将当前新数据保存到数据库,然后跳转回列表页 + - 点击取消,则跳转回列表页 \ No newline at end of file diff --git "a/\345\220\264\346\235\276\351\235\222/20260116-mvc\347\254\224\350\256\260.md" "b/\345\220\264\346\235\276\351\235\222/20260116-mvc\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..51181b958a7952b0dbc9371c57e682248f99a656 --- /dev/null +++ "b/\345\220\264\346\235\276\351\235\222/20260116-mvc\347\254\224\350\256\260.md" @@ -0,0 +1,29 @@ +随机数: +```bash +using System.Web.Mvc; + +public class HomeController : Controller +{ + // 示例:生成 [0, 100] 的随机数并返回给视图 + public ActionResult Index() + { + // 调用工具类生成随机数 + int randomNum = RandomHelper.Next(0, 100); + // 将随机数传递给视图 + ViewBag.RandomNumber = randomNum; + + // 也可以生成随机浮点数 + double randomDouble = RandomHelper.NextDouble(); + ViewBag.RandomDouble = randomDouble; + + return View(); + } + + // 示例:接口返回随机数 + public JsonResult GetRandomNumber() + { + int randomNum = RandomHelper.Next(10, 20); + return Json(new { number = randomNum }, JsonRequestBehavior.AllowGet); + } +} +``` \ No newline at end of file diff --git "a/\345\220\264\346\235\276\351\235\222/20260119-mvc.md" "b/\345\220\264\346\235\276\351\235\222/20260119-mvc.md" new file mode 100644 index 0000000000000000000000000000000000000000..531789fc593b738b80201fc18c339ccbc3dd0fe1 --- /dev/null +++ "b/\345\220\264\346\235\276\351\235\222/20260119-mvc.md" @@ -0,0 +1,21 @@ +### 笔记 + +1.创建模型类 + + 基本模型类:模型类通常放在Models文件夹中,是普通的C#类。 + 示例:Student.cs + + ```bash + namespace StudentManagementSystem.Models + { + public class Student + { + public int Id { get; set; } + public string Name { get; set; } + public int Age { get; set; } + public string Email { get; set; } + public DateTime EnrollmentDate { get; set; } + public string Major { get; set; } + } + } + ``` \ No newline at end of file diff --git "a/\345\220\264\346\235\276\351\235\222/20260121-mvc.md" "b/\345\220\264\346\235\276\351\235\222/20260121-mvc.md" new file mode 100644 index 0000000000000000000000000000000000000000..5b04a2b7f34b3431c54ddc0a8bda2f3e338d2ecf --- /dev/null +++ "b/\345\220\264\346\235\276\351\235\222/20260121-mvc.md" @@ -0,0 +1,30 @@ +### 笔记 +1. EF Core的工作方式 + + - Code First:先写代码(模型),再生成数据库(我们采用的方式) + - Database First:已有数据库,根据数据库生成代码 + - Model First:先设计模型图,再生成代码和数据库 + +2. 迁移(Migration) + + - 安装EF Core工具(如果尚未安装)`dotnet tool install --global dotnet-ef` + + - 创建迁移`dotnet ef migrations add InitialCreate` + + - 应用迁移到数据库`dotnet ef database update` + + - 删除最近一次迁移`dotnet ef migrations remove` + + - 生成SQL脚本(不执行)`dotnet ef migrations script` + + - 更新到特定迁移`dotnet ef database update TargetMigration` + +3. 使用DbContext进行数据操作 + + - 新增(Create): + + ```bash + var student = new Student { Name = "张三", Age = 20 }; + context.Students.Add(student); + await context.SaveChangesAsync(); + ``` \ No newline at end of file diff --git "a/\345\220\264\346\235\276\351\235\222/20260122-mvc.md" "b/\345\220\264\346\235\276\351\235\222/20260122-mvc.md" new file mode 100644 index 0000000000000000000000000000000000000000..40878ae959e1ba043cd3fd484e936380eedc42c9 --- /dev/null +++ "b/\345\220\264\346\235\276\351\235\222/20260122-mvc.md" @@ -0,0 +1,47 @@ +### 笔记 +1. 步骤1:安装2个包 + + 1. 安装EF Core SQLite提供程序(`Microsoft.EntityFrameworkCore.Sqlite`) + + - `dotnet add package Microsoft.EntityFrameworkCore.Sqlite -v 8.0` + + 2. 安装EF Core设计工具(用于迁移)(Microsoft.EntityFrameworkCore.Design) + + - `dotnet add package Microsoft.EntityFrameworkCore.Design -v 8.0` + +2. 步骤2:定义数据库上下文 + + 1. 定义数据库 + + - `public Dbset 名称{get;set}` + + 2. 配置数据库连接字符串 + +3. 步骤3:执行数据库迁移 + + 1. 2个先决条件 + + - 不能眼编译错误 + - 项目没有在运行,不在运行状态 + + 2. 命令 + + - `dotnet ef migrations add XXX` + + 3. 如果没有安装ef工具,使用如下命令 + + - `dotnet tool install --global dotnet-ef` + +4. 步骤4:将迁移文件更新应用到数据库 + + - `dotnet er database update` + +5. 步骤5:在控制器中使用数据库撒花姑娘下文进行CRUD + + - 新增(Create): + + ```bash + var student = new Student { Name = "张三", Age = 20 }; + context.Students.Add(student); + await context.SaveChangesAsync(); + ``` \ No newline at end of file diff --git "a/\345\220\264\346\235\276\351\235\222/20260123-mvc.md" "b/\345\220\264\346\235\276\351\235\222/20260123-mvc.md" new file mode 100644 index 0000000000000000000000000000000000000000..7f0cd85113a781072b78a20440391f03e3e8ba26 --- /dev/null +++ "b/\345\220\264\346\235\276\351\235\222/20260123-mvc.md" @@ -0,0 +1,17 @@ +### 笔记 +查找功能 + +```bash +public IActionResult Index(string keyword) + { + // 直接使用数据库表中的数据 + IEnumerable