From d66d4e280df5a17894972576de0ee7455a50f2d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=89=E5=BD=AC=E7=92=90?= <2178814089@qq.com> Date: Sun, 11 Jan 2026 19:21:54 +0800 Subject: [PATCH 1/7] zuoye --- .../20251229-\347\254\224\350\256\260.md" | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 "\345\206\211\345\275\254\347\222\220/20251229-\347\254\224\350\256\260.md" diff --git "a/\345\206\211\345\275\254\347\222\220/20251229-\347\254\224\350\256\260.md" "b/\345\206\211\345\275\254\347\222\220/20251229-\347\254\224\350\256\260.md" new file mode 100644 index 0000000..e234e8b --- /dev/null +++ "b/\345\206\211\345\275\254\347\222\220/20251229-\347\254\224\350\256\260.md" @@ -0,0 +1,65 @@ + +--- + +### **知识点4:在VSCode中运行与调试** + +#### **4.1 运行项目** +在VSCode中有多种方式运行项目: + +**方式1:使用命令行** +```bash +dotnet run +``` +程序启动后,按Ctrl+点击终端中的链接(如:https://localhost:7126) + +**方式2:使用VSCode运行配置** +1. 按F5或点击"运行和调试"侧边栏 +2. 选择".NET Core"环境 +3. VSCode会自动创建`.vscode/launch.json`配置文件 + +#### **4.2 VSCode调试技巧** +- **设置断点**:在代码行号左侧点击,出现红点 +- **启动调试**:按F5 +- **单步执行**:F10(逐过程)、F11(逐语句) +- **查看变量**:鼠标悬停或查看"变量"面板 + +#### **4.3 项目运行流程** +``` +dotnet run + ↓ +加载Program.cs → 配置服务 → 构建中间件管道 + ↓ +监听端口(如:5000, 5001) + ↓ +浏览器访问 https://localhost:5001 + ↓ +请求经过中间件管道 + ↓ +路由匹配到HomeController.Index() + ↓ +返回Views/Home/Index.cshtml + ↓ +浏览器显示页面 +``` + +--- + +### **步骤2:运行项目查看效果** +1. 打开终端(Ctrl+`) +2. 输入命令: +```bash +dotnet run +``` +3. 终端显示: +``` +正在生成... +info: Microsoft.Hosting.Lifetime[14] + Now listening on: https://localhost:7126 +info: Microsoft.Hosting.Lifetime[14] + Now listening on: http://localhost:5256 +info: Microsoft.Hosting.Lifetime[0] + Application started. Press Ctrl+C to shut down. +``` +4. 按Ctrl+点击 `https://localhost:7126` 链接 + + -- Gitee From 3df3e13fdea0f72ce13455dbe273cff6333ffd2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=89=E5=BD=AC=E7=92=90?= <2178814089@qq.com> Date: Sun, 11 Jan 2026 19:22:48 +0800 Subject: [PATCH 2/7] zuoye --- .../20251231-\347\254\224\350\256\260.md" | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 "\345\206\211\345\275\254\347\222\220/20251231-\347\254\224\350\256\260.md" diff --git "a/\345\206\211\345\275\254\347\222\220/20251231-\347\254\224\350\256\260.md" "b/\345\206\211\345\275\254\347\222\220/20251231-\347\254\224\350\256\260.md" new file mode 100644 index 0000000..55f2f98 --- /dev/null +++ "b/\345\206\211\345\275\254\347\222\220/20251231-\347\254\224\350\256\260.md" @@ -0,0 +1,125 @@ +### **步骤2:运行项目查看效果** +1. 打开终端(Ctrl+`) +2. 输入命令: +```bash +dotnet run +``` +3. 终端显示: +``` +正在生成... +info: Microsoft.Hosting.Lifetime[14] + Now listening on: https://localhost:7126 +info: Microsoft.Hosting.Lifetime[14] + Now listening on: http://localhost:5256 +info: Microsoft.Hosting.Lifetime[0] + Application started. Press Ctrl+C to shut down. +``` +4. 按Ctrl+点击 `https://localhost:7126` 链接 + +### **步骤3:查看运行效果** +![修改后的首页](./assets/images/homepage-modified.svg) + +--- + +## **4. 动手练习** + +### **练习1:修改导航栏** +打开 `Views/Shared/_Layout.cshtml`,找到导航栏部分,修改菜单项: + +```html + +``` + +### **练习2:更改页面标题** +修改 `_Layout.cshtml` 中的 `` 标签: +```html +<title>@ViewData["Title"] - 学生信息管理系统 (.NET 8) +``` + +### **练习3:体验命令行操作** +在终端中尝试以下命令,观察结果: +```bash +# 查看可用的项目模板 +dotnet new list + +# 查看项目信息 +dotnet --info + +# 恢复NuGet包(如果缺少依赖) +dotnet restore + +# 清理生成文件 +dotnet clean + +# 发布项目(生成可部署文件) +dotnet publish -c Release +``` + +--- + +## **5. 常见问题解答** + +### **Q1:运行`dotnet run`时提示"No project found"?** +**解决方案**: +```bash +# 确保在项目目录中(有.csproj文件的目录) +cd StudentManagementSystem + +# 或者指定项目文件 +dotnet run --project StudentManagementSystem.csproj +``` + +### **Q2:VSCode提示"找不到命名空间"?** +**解决方案**: +1. 确保安装了C#扩展 +2. 在终端运行:`dotnet restore` +3. 重启VSCode +4. 如果仍不行,检查`.csproj`文件中的包引用 + +### **Q3:端口被占用怎么办?** +**解决方案**: +1. 停止当前程序(在终端按Ctrl+C) +2. 修改 `Properties/launchSettings.json`: +```json +"applicationUrl": "https://localhost:5001;http://localhost:5000" +``` +3. 或者使用指定端口运行: +```bash +dotnet run --urls "https://localhost:6000;http://localhost:6001" +``` + +### **Q4:如何查看项目依赖的NuGet包?** +```bash +# 查看项目引用的包 +dotnet list package + +# 添加新包(后续会用到) +dotnet add package Microsoft.EntityFrameworkCore.Sqlite +``` + +--- + -- Gitee From 3743fce3d12a46cac0fe7e9efe5749b65112967a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=89=E5=BD=AC=E7=92=90?= <2178814089@qq.com> Date: Sun, 11 Jan 2026 19:23:28 +0800 Subject: [PATCH 3/7] zuoye --- .../20260104-\347\254\224\350\256\260.md" | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "\345\206\211\345\275\254\347\222\220/20260104-\347\254\224\350\256\260.md" diff --git "a/\345\206\211\345\275\254\347\222\220/20260104-\347\254\224\350\256\260.md" "b/\345\206\211\345\275\254\347\222\220/20260104-\347\254\224\350\256\260.md" new file mode 100644 index 0000000..b8c290f --- /dev/null +++ "b/\345\206\211\345\275\254\347\222\220/20260104-\347\254\224\350\256\260.md" @@ -0,0 +1,49 @@ +视图 +```cs + +@model StudentManagementSystem.Models.Student: + + +-------------------------------- + +@using StudentManagementSystem.Models + + +@{ + Layout = "_Layout"; + //若写在:_ViewStart.cshtml 则默认所有视图都使用 Shared/_Layout.cshtml + //可以是null,是不使用任何布局页 +} + + +@{ + 1.ViewData["Title"] = "学生详情"; + 2.ViewBag.PageName = "Student Details"; + 3.强类型 +} +``` +```html +@{ + Layout = "_Layout"; + ViewData["Title"] = "学生列表"; +} + +
+

学生列表

+ +
+ +@section Styles { + +} + +@section Scripts { + +} +``` \ No newline at end of file -- Gitee From b34371492af56c6b6af10485179e7660fc4259b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=89=E5=BD=AC=E7=92=90?= <2178814089@qq.com> Date: Sun, 11 Jan 2026 19:24:02 +0800 Subject: [PATCH 4/7] zuoye --- .../20260107-\347\254\224\350\256\260.md" | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 "\345\206\211\345\275\254\347\222\220/20260107-\347\254\224\350\256\260.md" diff --git "a/\345\206\211\345\275\254\347\222\220/20260107-\347\254\224\350\256\260.md" "b/\345\206\211\345\275\254\347\222\220/20260107-\347\254\224\350\256\260.md" new file mode 100644 index 0000000..f5a2e8a --- /dev/null +++ "b/\345\206\211\345\275\254\347\222\220/20260107-\347\254\224\350\256\260.md" @@ -0,0 +1,13 @@ +创建项目步骤 +```bash +步骤1:打开终端 + Windows: 按Win+R,输入cmd或使用PowerShell + Mac/Linux: 打开Terminal +步骤2:创建项目目录并进入 + mkdir StudentManagementSystem + cd StudentManagementSystem +步骤3:创建MVC项目 + dotnet new mvc -n StudentManagementSystem +步骤4:用VSCode打开项目 + code . +``` \ No newline at end of file -- Gitee From 93792b9f8dc770dd43d3dffd343746e070b9817c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=89=E5=BD=AC=E7=92=90?= <2178814089@qq.com> Date: Sun, 11 Jan 2026 19:24:40 +0800 Subject: [PATCH 5/7] zuopye --- .../20260108-\347\254\224\350\256\260.md" | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 "\345\206\211\345\275\254\347\222\220/20260108-\347\254\224\350\256\260.md" diff --git "a/\345\206\211\345\275\254\347\222\220/20260108-\347\254\224\350\256\260.md" "b/\345\206\211\345\275\254\347\222\220/20260108-\347\254\224\350\256\260.md" new file mode 100644 index 0000000..eb0ad1f --- /dev/null +++ "b/\345\206\211\345\275\254\347\222\220/20260108-\347\254\224\350\256\260.md" @@ -0,0 +1,14 @@ +form 标签表单提交 asp-\*属性 + +作用:自动生成 form 标签 action 属性,匹配后端路由提交表单,替代 Html.BeginForm。 + + +常用 asp-\* + +| 标签+属性 | 适用标签 | 详细作用 | 是否路由匹配 | +| -------------- | ------------ | -------------------------------- | ------------ | +| asp-controller | a、form | 指定控制器名,无 Controller 后缀 | 是 | +| asp-action | a、form | 指定 Action 方法名 | 是 | +| asp-route-xxx | a、form | 传递路由参数,匹配 Action 形参 | 是 | +| asp-method | form | 指定请求方式,默认 post | 是 | +| asp-for | 所有表单控件 | 绑定模型属性,自动生成 id/name | 否 | \ No newline at end of file -- Gitee From a638ea4cf176976ccda3ffbb3961678991f635a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=89=E5=BD=AC=E7=92=90?= <2178814089@qq.com> Date: Sun, 11 Jan 2026 19:25:15 +0800 Subject: [PATCH 6/7] zuoye --- .../20260109-\347\254\224\350\256\260.md" | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 "\345\206\211\345\275\254\347\222\220/20260109-\347\254\224\350\256\260.md" diff --git "a/\345\206\211\345\275\254\347\222\220/20260109-\347\254\224\350\256\260.md" "b/\345\206\211\345\275\254\347\222\220/20260109-\347\254\224\350\256\260.md" new file mode 100644 index 0000000..29ac267 --- /dev/null +++ "b/\345\206\211\345\275\254\347\222\220/20260109-\347\254\224\350\256\260.md" @@ -0,0 +1,47 @@ +# 一、数据验证体系(前后端双验证) +## 1. 模型验证(规则统一定义) +- 核心:在`Student`模型类中通过`System.ComponentModel.DataAnnotations`特性定义验证规则,前后端共用 +- 常用特性: + - `[Required]`:必填项验证(自定义错误提示) + - `[StringLength/Range]`:长度/数值范围验证 + - `[EmailAddress/RegularExpression]`:格式验证(邮箱、手机号等) + - `[Display]`:设置字段友好显示名 + +## 2. 客户端验证(前端即时反馈) +- 依赖:引入`jquery.validate.min.js` + `jquery.validate.unobtrusive.min.js`(通常放在`@section Scripts`中) +- 生效:框架自动将模型验证规则转为`data-*`属性,表单提交前在浏览器端验证,无需后端交互 +- 展示:通过`asp-validation-for`显示错误提示,提升用户体验 + +## 3. 服务器端验证(后端安全兜底) +- 核心:控制器Action中通过`ModelState.IsValid`检查验证状态(不可省略,客户端验证可被绕过) +- 逻辑:验证失败返回表单视图(保留用户输入),验证成功执行业务逻辑(如保存数据) + +# 二、前端交互与表单处理 +## 1. Razor与JavaScript交互 +- 方式:在JS中嵌入Razor变量,实现服务端数据向客户端传递 +- 示例:`var studentId = @Model.Id;`、`@Html.Raw(Json.Serialize(Model))`序列化整个模型 + +## 2. 异步表单提交 +| 方式 | 核心特点 | 关键语法 | +|------------|------------------------------|-----------------------------------| +| jQuery AJAX| 基于回调,兼容性好 | `$.ajax({url/method/data/success})` | +| Fetch API | 现代方式,支持Promise/async | `await fetch(url, {method/body})` | +| 核心动作 | 阻止传统提交(`e.preventDefault()`)、序列化表单数据 | - | + +# 三、学生管理系统核心实现(作业示例) +## 1. 核心文件与功能 +| 文件/模块 | 核心功能 | 关键要点 | +|--------------------------|-------------------------------------------|---------------------------------------| +| Models\Student.cs | 定义学生模型(Id/Name/Age/Gender) | 含无参/有参构造函数,属性非空约束 | +| Controllers\StudentController.cs | 学生增删查(Index/Add/Delete) | 静态列表存储数据;Add区分GET(展示表单)/POST(保存数据);Delete通过Id删除 | +| Views\Student\Add.cshtml | 新增学生表单 | 基于`asp-for`绑定模型;表单通过`asp-controller/action`指定提交目标 | +| Views\Student\Index.cshtml | 学生列表展示 | 遍历模型显示数据;性别通过三元表达式转换(1=男/2=女);删除按钮通过`asp-route-id`传参 | + +## 2. 路由与标签助手 +- 核心:`a`标签通过`asp-controller/action/route-参数名`实现跳转(如新增/删除按钮);表单通过`asp-*`属性自动生成action +- 规则:控制器名无`Controller`后缀,参数名大小写严格匹配 + +# 核心总结 +1. 数据验证遵循「模型定义规则、前端即时验证、后端最终校验」原则,二者缺一不可; +2. 前端交互可通过Razor传参+异步提交实现无刷新体验,支持jQuery/Fetch两种方式; +3. 学生管理系统核心是控制器CRUD逻辑+Razor视图绑定,依托标签助手简化路由与表单配置。 \ No newline at end of file -- Gitee From 72711c3ac7259bc525e6890ba77615b36f6505bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=89=E5=BD=AC=E7=92=90?= <2178814089@qq.com> Date: Sun, 11 Jan 2026 21:27:51 +0800 Subject: [PATCH 7/7] zuoye --- .../20260105-\347\254\224\350\256\260.md" | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 "\345\206\211\345\275\254\347\222\220/20260105-\347\254\224\350\256\260.md" diff --git "a/\345\206\211\345\275\254\347\222\220/20260105-\347\254\224\350\256\260.md" "b/\345\206\211\345\275\254\347\222\220/20260105-\347\254\224\350\256\260.md" new file mode 100644 index 0000000..fbbd001 --- /dev/null +++ "b/\345\206\211\345\275\254\347\222\220/20260105-\347\254\224\350\256\260.md" @@ -0,0 +1,10 @@ +## MVC视图(View)与Razor语法笔记 + +### 核心概念 +视图负责将数据渲染成用户可见的HTML页面,使用Razor语法混合HTML与C#代码。 + +### Razor语法要点 +- **表达式**: `@变量名` 或 `@DateTime.Now` 输出内容 +- **代码块**: `@{ var x = 10; }` 执行多行C#代码 +- **控制结构**: `@if(){}` `@foreach(){}` 控制流程 +- **指令**: `@model 模型类型` 指定强类型模型 -- Gitee