From 242cad872d60e26fbfe3a87888ec31d33b7f3ff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=88=92=E9=9C=B2=E7=91=B6?= <446345442@qq.com> Date: Sun, 18 Jan 2026 22:47:21 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...344\270\252MVC\351\241\265\351\235\242.md" | 22 +++ ...1-\346\216\247\345\210\266\345\231\250.md" | 100 +++++++++++++ ...4-\346\216\247\345\210\266\345\231\250.md" | 80 +++++++++++ "20260105\345\207\272\345\205\245MVC.md" | 17 +++ ...7-\346\216\247\345\210\266\345\231\250.md" | 35 +++++ "20260108-\350\247\206\345\233\276.md" | 34 +++++ "20260109-\346\250\241\345\236\213.md" | 40 ++++++ "20260112-\346\226\260\345\242\236.md" | 22 +++ "20260114-\345\210\240\351\231\244.md" | 23 +++ "20260115-\347\274\226\350\276\221.md" | 24 ++++ "20260116-\347\273\203\344\271\240.md" | 134 ++++++++++++++++++ 11 files changed, 531 insertions(+) create mode 100644 "20251230-\346\220\255\345\273\272\345\274\200\345\217\221\347\216\257\345\242\203\344\270\216\347\254\254\344\270\200\344\270\252MVC\351\241\265\351\235\242.md" create mode 100644 "20251231-\346\216\247\345\210\266\345\231\250.md" create mode 100644 "20260104-\346\216\247\345\210\266\345\231\250.md" create mode 100644 "20260105\345\207\272\345\205\245MVC.md" create mode 100644 "20260107-\346\216\247\345\210\266\345\231\250.md" create mode 100644 "20260108-\350\247\206\345\233\276.md" create mode 100644 "20260109-\346\250\241\345\236\213.md" create mode 100644 "20260112-\346\226\260\345\242\236.md" create mode 100644 "20260114-\345\210\240\351\231\244.md" create mode 100644 "20260115-\347\274\226\350\276\221.md" create mode 100644 "20260116-\347\273\203\344\271\240.md" diff --git "a/20251230-\346\220\255\345\273\272\345\274\200\345\217\221\347\216\257\345\242\203\344\270\216\347\254\254\344\270\200\344\270\252MVC\351\241\265\351\235\242.md" "b/20251230-\346\220\255\345\273\272\345\274\200\345\217\221\347\216\257\345\242\203\344\270\216\347\254\254\344\270\200\344\270\252MVC\351\241\265\351\235\242.md" new file mode 100644 index 0000000..06ccf1d --- /dev/null +++ "b/20251230-\346\220\255\345\273\272\345\274\200\345\217\221\347\216\257\345\242\203\344\270\216\347\254\254\344\270\200\344\270\252MVC\351\241\265\351\235\242.md" @@ -0,0 +1,22 @@ +## 笔记 +一、搭建开发环境(通用 Web / 前端方向) +核心工具准备 +编辑器:选 VS Code(轻量、插件丰富),安装基础插件(如中文包、语法高亮); +运行环境:前端需 Node.js(提供 npm 包管理),后端(如 Java/.NET)需对应 SDK(如 JDK/.NET SDK); +浏览器:Chrome/Firefox(用于调试页面)。 +环境验证 +终端输入node -v/java -version等,确认工具安装成功; +初始化项目(如npm init),创建基础目录结构(src、public 等)。 +二、第一个 MVC 页面(核心概念 + 实现) +MVC 核心分工(一句话理解) +M(Model):数据层,比如存储 / 处理页面需要的分数、累加和等数据; +V(View):视图层,就是 HTML 页面,负责展示数据(如显示成绩等级、累加结果); +C(Controller):控制层,用 JS / 后端代码连接 M 和 V,比如接收输入、调用逻辑、更新视图。 +最简实现步骤 +写 View(HTML):创建输入框、按钮、显示结果的区域; +定义 Model(JS):存储基础数据(如let score = 85); +编写 Controller(JS):绑定按钮点击事件,处理逻辑(如判断等级、计算累加和),把结果更新到 View。 +总结 +开发环境核心:装好编辑器 + 对应运行环境,验证能正常执行代码; +MVC 核心:数据(M)、展示(V)、逻辑控制(C)分离,让代码结构更清晰; +第一个 MVC 页面:先写展示界面,再定义数据,最后用控制逻辑连接两者。 \ No newline at end of file diff --git "a/20251231-\346\216\247\345\210\266\345\231\250.md" "b/20251231-\346\216\247\345\210\266\345\231\250.md" new file mode 100644 index 0000000..a1540e7 --- /dev/null +++ "b/20251231-\346\216\247\345\210\266\345\231\250.md" @@ -0,0 +1,100 @@ +## 笔记 +MVC 中控制器(Controller)的核心总结 +核心定位:控制器是 MVC 的 “中间人”,连接 Model(数据)和 View(视图),是业务逻辑的处理中心。 +核心职责: +接收用户操作(比如点击按钮、输入内容); +调用 Model 处理数据(比如计算累加和、判断成绩等级); +把处理后的结果传递给 View,让视图更新展示(比如把 “良好” 显示在页面上)。 +简单例子(对应之前的代码): +比如判断成绩等级时,点击 “查询” 按钮后: +控制器先获取输入的分数(接收用户操作); +调用数据逻辑判断等级(调用 Model); +把 “良好” 这个结果显示到页面上(更新 View)。 +总结 +控制器是MVC 的逻辑中枢,不存数据、不负责展示,只做 “调度”; +核心动作:接收请求 → 处理逻辑 → 反馈结果; +作用:让数据(M)和视图(V)分离,代码更易维护。 +## 练习 +- 1. 练习1 +- 源代码 +``` + +@{ + ViewData["Title"] = "教师详情"; +} + +

教师详情

+
+
+
+
ID:
+
@Model.Id
+ +
姓名:
+
@Model.Name
+ +
教授科目:
+
@Model.Subject
+ +
教龄:
+
@Model.TeachingYears 年
+
+
+
+ @* 返回列表页 *@ + 返回教师列表 +
+``` +- 2. 练习2 +- 源代码 +``` + +@{ + ViewData["Title"] = "学生搜索"; +} + +

学生搜索

+ + +
+
+ +
+ +
+ +
+ + +

搜索结果

+@if (Model.Count == 0) +{ +

未找到匹配的学生

+} +else +{ + + + + + + + + + + + @foreach (var student in Model) + { + + + + + + + } + +
ID姓名专业年龄
@student.Id@student.Name@student.Major@student.Age
+} +``` diff --git "a/20260104-\346\216\247\345\210\266\345\231\250.md" "b/20260104-\346\216\247\345\210\266\345\231\250.md" new file mode 100644 index 0000000..2437a01 --- /dev/null +++ "b/20260104-\346\216\247\345\210\266\345\231\250.md" @@ -0,0 +1,80 @@ +## 笔记 +控制器的桥梁作用:强调控制器连接用户请求、模型数据和视图显示 +动作方法对应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
+ + + + + + + +``` + diff --git "a/20260105\345\207\272\345\205\245MVC.md" "b/20260105\345\207\272\345\205\245MVC.md" new file mode 100644 index 0000000..3ca749f --- /dev/null +++ "b/20260105\345\207\272\345\205\245MVC.md" @@ -0,0 +1,17 @@ +## 笔记 +MVC(Model-View-Controller)是一种软件架构模式,将应用分为三个核心组件: + +**Model(模型)**:负责数据和业务逻辑,直接管理数据、规则和操作。不涉及任何界面展示。 + +**View(视图)**:用户界面层,展示数据并接收用户输入。通常是被动的,不处理业务逻辑。 + +**Controller(控制器)**:协调层,接收用户输入,调用模型处理数据,更新视图显示结果。充当Model和View之间的桥梁。 +**工作流程**: +1. 用户通过View交互 +2. Controller接收请求 +3. Controller调用Model处理业务 +4. Model更新数据并返回结果 +5. Controller将结果传递给View +6. View更新界面展示 +**优点**:分离关注点、代码复用性高、便于团队协作。 +**初学要点**:明确各层职责边界,避免将业务逻辑写入视图,保持控制器精简,让模型处理核心逻辑。这种分层思想是现代Web框架(如Spring MVC、ASP.NET MVC)的基础。 \ No newline at end of file diff --git "a/20260107-\346\216\247\345\210\266\345\231\250.md" "b/20260107-\346\216\247\345\210\266\345\231\250.md" new file mode 100644 index 0000000..7c8700c --- /dev/null +++ "b/20260107-\346\216\247\345\210\266\345\231\250.md" @@ -0,0 +1,35 @@ +## 笔记 + +**控制器是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"); + } +} +``` \ No newline at end of file diff --git "a/20260108-\350\247\206\345\233\276.md" "b/20260108-\350\247\206\345\233\276.md" new file mode 100644 index 0000000..aad94ea --- /dev/null +++ "b/20260108-\350\247\206\345\233\276.md" @@ -0,0 +1,34 @@ +## 笔记 + +**视图是MVC的展示层**,负责将数据呈现为用户界面,不包含业务逻辑。 + +**核心职责:** + +1. **数据展示**:将模型数据渲染为HTML/UI +2. **用户交互**:提供表单、按钮等交互元素 +3. **界面结构**:定义页面布局和视觉呈现 +4. **数据绑定**:动态显示模型状态变化 + +**设计原则:** + +- 保持“笨视图”,仅负责展示 +- 避免在视图中编写业务逻辑 +- 最小化视图中的代码逻辑 +- 使用模板语言分离结构和逻辑 + +**视图类型:** + +- **强类型视图**:绑定特定模型类型 +- **布局视图**:定义页面通用结构 +- **部分视图**:可重用的UI组件 +- **视图组件**:包含逻辑的独立UI单元 + +**示例(Razor视图):** +``` +```html +@model User +

欢迎,@Model.Name

+

上次登录:@Model.LastLogin

+ +``` + diff --git "a/20260109-\346\250\241\345\236\213.md" "b/20260109-\346\250\241\345\236\213.md" new file mode 100644 index 0000000..f37ee30 --- /dev/null +++ "b/20260109-\346\250\241\345\236\213.md" @@ -0,0 +1,40 @@ +## 笔记 + +**模型是MVC的业务核心**,封装应用数据和业务规则,独立于用户界面。 +**核心职责:** + +1. **数据管理**:定义数据结构、持久化操作 +2. **业务逻辑**:实现核心计算规则和业务流程 +3. **数据验证**:确保数据完整性和有效性 +4. **状态管理**:维护应用状态变更 + +**设计原则:** + +- 保持“胖模型”,集中存放业务逻辑 +- 独立于控制器和视图,可单独测试 +- 遵循单一职责,避免“上帝对象” +- 提供清晰的API供控制器调用 + +**模型类型:** + +- **领域模型**:封装业务实体和规则 +- **视图模型**:为特定视图优化的数据结构 +- **数据模型**:直接映射数据存储结构 + +**示例(伪代码):** + +```java +``` +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 diff --git "a/20260112-\346\226\260\345\242\236.md" "b/20260112-\346\226\260\345\242\236.md" new file mode 100644 index 0000000..343f1e6 --- /dev/null +++ "b/20260112-\346\226\260\345\242\236.md" @@ -0,0 +1,22 @@ +## 笔记 +``` +新增功能分析 +点击新增按钮,跳转到一个页面A +使用a标签代替原来的新增按钮,有如下几种方式 +新增 +新增 +在页面A中是一个表单,有若干表单项,有一个提交按钮,有一个取消按钮 +
+表单项asp-for和模型绑定 +点击提交时,将表单数据保存到数据库表,(成功)后跳转回列表 +List list list.Add +点击取消按钮,跳转回列表页 +选、分页、排序,框架提供了封装好的查询工具类,无需手写大量 SQL。 +1. 核心流程 +前端请求 +Controller接收参数 +构造查询条件 +调用仓储/服务层查询 +返回分页/列表数据 +前端渲染 +``` \ No newline at end of file diff --git "a/20260114-\345\210\240\351\231\244.md" "b/20260114-\345\210\240\351\231\244.md" new file mode 100644 index 0000000..6b2e643 --- /dev/null +++ "b/20260114-\345\210\240\351\231\244.md" @@ -0,0 +1,23 @@ +## 笔记 +删除功能分析 +点击删除按钮,跳转一个页面B +页面B中,有提示,询问要不要删除 +询问要不要删除 +如果是,则删除后返回列表页 +如果不是,则直接返回列表页 + +删除功能核心知识点 +删除分物理删除(直接删数据)和逻辑删除(标记删除状态),MVC 中优先推荐逻辑删除,核心是防误删、数据可恢复。 +核心逻辑: +接收删除主键 → 校验主键 / 权限 → 执行物理 / 逻辑删除 → 提交保存 → 返回结果。 +关键要点: +主键校验:必传删除目标的主键(如 ID),且校验主键格式(如数字 / 字符串合法性); +逻辑删除(主流):不删除数据,仅修改状态字段(如 IsDeleted=true/Status=0),保留数据溯源能力; +物理删除(慎用):直接调用仓储 Delete 方法删除数据,仅适用于无溯源需求的临时数据; +关联删除:若删除的主数据关联子数据(如用户关联订单),需处理级联删除(物理删除)或级联标记(逻辑删除),避免外键约束报错; +批量删除:接收 ID 列表,调用 DeleteRange 批量处理,减少数据库交互次数; +防误删:重要数据删除前可加二次确认(前端),或保留删除日志。 +三、更新 & 删除共性知识点 +请求规范:更新 / 删除多用 HttpPost(或 HttpPut/HttpDelete,RESTful 风格),避免用 HttpGet(防止 URL 暴露参数、误触发); +返回格式:统一用 JsonSuccess/JsonError 返回结果,包含操作状态、提示信息; +异常处理:捕获数据库异常(如外键约束、主键不存在),返回友好提示(而非原生异常),并记录操作日志; \ No newline at end of file diff --git "a/20260115-\347\274\226\350\276\221.md" "b/20260115-\347\274\226\350\276\221.md" new file mode 100644 index 0000000..eff7193 --- /dev/null +++ "b/20260115-\347\274\226\350\276\221.md" @@ -0,0 +1,24 @@ +## 笔记 +编辑功能分析 +点击编辑按钮,跳转一个页面C +在页面C中有展示表单,表单中有原来的数据 +在页面C中,有保存,有取消 +点击保存,则将当前新数据保存到数据库,然后跳转回列表页 +点击取消,则跳转回列表页 + +## 练习 +1.练习1 +``` +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 diff --git "a/20260116-\347\273\203\344\271\240.md" "b/20260116-\347\273\203\344\271\240.md" new file mode 100644 index 0000000..8971886 --- /dev/null +++ "b/20260116-\347\273\203\344\271\240.md" @@ -0,0 +1,134 @@ +## 练习 +1.练习1 +``` +public class ArticleController : Controller +{ + // 模拟仓储层(实际项目用依赖注入) + private readonly List
_articles = new List
+ { + new Article { ID = 1, Title = "33333", Content = "9999", Author = "编辑" }, + new Article { ID = 2, Title = "33333", Content = "9999", Author = "编辑" } + }; + + // 列表页 + public ActionResult Index(ArticleQueryModel query) + { + var data = _articles.AsQueryable(); + // 可扩展查询逻辑 + if (!string.IsNullOrEmpty(query.Keyword)) + data = data.Where(a => a.Title.Contains(query.Keyword)); + + return View(data.ToList()); + } + + // 新增页 + public ActionResult Create() + { + return View(); + } + + // 提交新增 + [HttpPost] + public ActionResult Create(Article model) + { + if (ModelState.IsValid) + { + model.ID = _articles.Max(a => a.ID) + 1; + _articles.Add(model); + return RedirectToAction("Index"); + } + return View(model); + } + + // 编辑页 + public ActionResult Edit(int id) + { + var article = _articles.FirstOrDefault(a => a.ID == id); + if (article == null) return HttpNotFound(); + return View(article); + } + + // 提交编辑 + [HttpPost] + public ActionResult Edit(Article model) + { + if (ModelState.IsValid) + { + var article = _articles.FirstOrDefault(a => a.ID == model.ID); + if (article != null) + { + article.Title = model.Title; + article.Content = model.Content; + article.Author = model.Author; + } + return RedirectToAction("Index"); + } + return View(model); + } + + // 详情页 + public ActionResult Details(int id) + { + var article = _articles.FirstOrDefault(a => a.ID == id); + if (article == null) return HttpNotFound(); + return View(article); + } + + // 删除 + public ActionResult Delete(int id) + { + var article = _articles.FirstOrDefault(a => a.ID == id); + if (article != null) _articles.Remove(article); + return RedirectToAction("Index"); + } +} +// 实体类(对应数据库表) +public class Article +{ + public int ID { get; set; } + public string Title { get; set; } + public string Content { get; set; } + public string Author { get; set; } +} + +// 查询列表用的视图模型(可扩展查询条件) +public class ArticleQueryModel +{ + public int PageIndex { get; set; } = 1; + public int PageSize { get; set; } = 10; + public string Keyword { get; set; } +} +@{ + ViewBag.Title = "文章列表"; +} + +

新增

+

+ @Html.ActionLink("新增", "Create") +

+ + + + + + + + + +@foreach (var item in Model) { + + + + + + + +} +
@Html.DisplayNameFor(model => model.ID)@Html.DisplayNameFor(model => model.Title)@Html.DisplayNameFor(model => model.Content)@Html.DisplayNameFor(model => model.Author)操作
@Html.DisplayFor(modelItem => item.ID)@Html.DisplayFor(modelItem => item.Title)@Html.DisplayFor(modelItem => item.Content)@Html.DisplayFor(modelItem => item.Author) + @Html.ActionLink("编辑", "Edit", new { id=item.ID }) | + @Html.ActionLink("详情", "Details", new { id=item.ID }) | + @Html.ActionLink("删除", "Delete", new { id=item.ID }) +
+``` + + -- Gitee From f9bb59b3866d9db678bc221ae5a050bbe0e7b5e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=88=92=E9=9C=B2=E7=91=B6?= <446345442@qq.com> Date: Sun, 18 Jan 2026 23:00:44 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...54\254\344\270\200\344\270\252MVC\351\241\265\351\235\242.md" | 0 .../20251231-\346\216\247\345\210\266\345\231\250.md" | 0 .../20260104-\346\216\247\345\210\266\345\231\250.md" | 0 .../20260105-\345\207\272\345\205\245mvc.md" | 0 .../20260107-\346\216\247\345\210\266\345\231\250.md" | 0 .../20260108-\350\247\206\345\233\276.md" | 1 - .../20260109-\346\250\241\345\236\213.md" | 0 .../20260112.-\346\226\260\345\242\236md" | 0 .../20260114-\345\210\240\351\231\244.md" | 0 .../20260115-\347\274\226\350\276\221.md" | 0 .../20260116-\347\273\203\344\271\240.md" | 0 11 files changed, 1 deletion(-) rename "20251230-\346\220\255\345\273\272\345\274\200\345\217\221\347\216\257\345\242\203\344\270\216\347\254\254\344\270\200\344\270\252MVC\351\241\265\351\235\242.md" => "\350\210\222\351\234\262\347\221\266/20251230-\346\220\255\345\273\272\345\274\200\345\217\221\347\216\257\345\242\203\344\270\216\347\254\254\344\270\200\344\270\252MVC\351\241\265\351\235\242.md" (100%) rename "20251231-\346\216\247\345\210\266\345\231\250.md" => "\350\210\222\351\234\262\347\221\266/20251231-\346\216\247\345\210\266\345\231\250.md" (100%) rename "20260104-\346\216\247\345\210\266\345\231\250.md" => "\350\210\222\351\234\262\347\221\266/20260104-\346\216\247\345\210\266\345\231\250.md" (100%) rename "20260105\345\207\272\345\205\245MVC.md" => "\350\210\222\351\234\262\347\221\266/20260105-\345\207\272\345\205\245mvc.md" (100%) rename "20260107-\346\216\247\345\210\266\345\231\250.md" => "\350\210\222\351\234\262\347\221\266/20260107-\346\216\247\345\210\266\345\231\250.md" (100%) rename "20260108-\350\247\206\345\233\276.md" => "\350\210\222\351\234\262\347\221\266/20260108-\350\247\206\345\233\276.md" (99%) rename "20260109-\346\250\241\345\236\213.md" => "\350\210\222\351\234\262\347\221\266/20260109-\346\250\241\345\236\213.md" (100%) rename "20260112-\346\226\260\345\242\236.md" => "\350\210\222\351\234\262\347\221\266/20260112.-\346\226\260\345\242\236md" (100%) rename "20260114-\345\210\240\351\231\244.md" => "\350\210\222\351\234\262\347\221\266/20260114-\345\210\240\351\231\244.md" (100%) rename "20260115-\347\274\226\350\276\221.md" => "\350\210\222\351\234\262\347\221\266/20260115-\347\274\226\350\276\221.md" (100%) rename "20260116-\347\273\203\344\271\240.md" => "\350\210\222\351\234\262\347\221\266/20260116-\347\273\203\344\271\240.md" (100%) diff --git "a/20251230-\346\220\255\345\273\272\345\274\200\345\217\221\347\216\257\345\242\203\344\270\216\347\254\254\344\270\200\344\270\252MVC\351\241\265\351\235\242.md" "b/\350\210\222\351\234\262\347\221\266/20251230-\346\220\255\345\273\272\345\274\200\345\217\221\347\216\257\345\242\203\344\270\216\347\254\254\344\270\200\344\270\252MVC\351\241\265\351\235\242.md" similarity index 100% rename from "20251230-\346\220\255\345\273\272\345\274\200\345\217\221\347\216\257\345\242\203\344\270\216\347\254\254\344\270\200\344\270\252MVC\351\241\265\351\235\242.md" rename to "\350\210\222\351\234\262\347\221\266/20251230-\346\220\255\345\273\272\345\274\200\345\217\221\347\216\257\345\242\203\344\270\216\347\254\254\344\270\200\344\270\252MVC\351\241\265\351\235\242.md" diff --git "a/20251231-\346\216\247\345\210\266\345\231\250.md" "b/\350\210\222\351\234\262\347\221\266/20251231-\346\216\247\345\210\266\345\231\250.md" similarity index 100% rename from "20251231-\346\216\247\345\210\266\345\231\250.md" rename to "\350\210\222\351\234\262\347\221\266/20251231-\346\216\247\345\210\266\345\231\250.md" diff --git "a/20260104-\346\216\247\345\210\266\345\231\250.md" "b/\350\210\222\351\234\262\347\221\266/20260104-\346\216\247\345\210\266\345\231\250.md" similarity index 100% rename from "20260104-\346\216\247\345\210\266\345\231\250.md" rename to "\350\210\222\351\234\262\347\221\266/20260104-\346\216\247\345\210\266\345\231\250.md" diff --git "a/20260105\345\207\272\345\205\245MVC.md" "b/\350\210\222\351\234\262\347\221\266/20260105-\345\207\272\345\205\245mvc.md" similarity index 100% rename from "20260105\345\207\272\345\205\245MVC.md" rename to "\350\210\222\351\234\262\347\221\266/20260105-\345\207\272\345\205\245mvc.md" diff --git "a/20260107-\346\216\247\345\210\266\345\231\250.md" "b/\350\210\222\351\234\262\347\221\266/20260107-\346\216\247\345\210\266\345\231\250.md" similarity index 100% rename from "20260107-\346\216\247\345\210\266\345\231\250.md" rename to "\350\210\222\351\234\262\347\221\266/20260107-\346\216\247\345\210\266\345\231\250.md" diff --git "a/20260108-\350\247\206\345\233\276.md" "b/\350\210\222\351\234\262\347\221\266/20260108-\350\247\206\345\233\276.md" similarity index 99% rename from "20260108-\350\247\206\345\233\276.md" rename to "\350\210\222\351\234\262\347\221\266/20260108-\350\247\206\345\233\276.md" index aad94ea..bda25e1 100644 --- "a/20260108-\350\247\206\345\233\276.md" +++ "b/\350\210\222\351\234\262\347\221\266/20260108-\350\247\206\345\233\276.md" @@ -31,4 +31,3 @@

上次登录:@Model.LastLogin

``` - diff --git "a/20260109-\346\250\241\345\236\213.md" "b/\350\210\222\351\234\262\347\221\266/20260109-\346\250\241\345\236\213.md" similarity index 100% rename from "20260109-\346\250\241\345\236\213.md" rename to "\350\210\222\351\234\262\347\221\266/20260109-\346\250\241\345\236\213.md" diff --git "a/20260112-\346\226\260\345\242\236.md" "b/\350\210\222\351\234\262\347\221\266/20260112.-\346\226\260\345\242\236md" similarity index 100% rename from "20260112-\346\226\260\345\242\236.md" rename to "\350\210\222\351\234\262\347\221\266/20260112.-\346\226\260\345\242\236md" diff --git "a/20260114-\345\210\240\351\231\244.md" "b/\350\210\222\351\234\262\347\221\266/20260114-\345\210\240\351\231\244.md" similarity index 100% rename from "20260114-\345\210\240\351\231\244.md" rename to "\350\210\222\351\234\262\347\221\266/20260114-\345\210\240\351\231\244.md" diff --git "a/20260115-\347\274\226\350\276\221.md" "b/\350\210\222\351\234\262\347\221\266/20260115-\347\274\226\350\276\221.md" similarity index 100% rename from "20260115-\347\274\226\350\276\221.md" rename to "\350\210\222\351\234\262\347\221\266/20260115-\347\274\226\350\276\221.md" diff --git "a/20260116-\347\273\203\344\271\240.md" "b/\350\210\222\351\234\262\347\221\266/20260116-\347\273\203\344\271\240.md" similarity index 100% rename from "20260116-\347\273\203\344\271\240.md" rename to "\350\210\222\351\234\262\347\221\266/20260116-\347\273\203\344\271\240.md" -- Gitee