diff --git "a/\347\216\213\351\235\226\350\214\271/20241127-MVC\346\270\262\346\237\223.md" "b/\347\216\213\351\235\226\350\214\271/20241127-MVC\346\270\262\346\237\223.md"
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git "a/\347\216\213\351\235\226\350\214\271/20241127-razor.md" "b/\347\216\213\351\235\226\350\214\271/20241127-razor.md"
new file mode 100644
index 0000000000000000000000000000000000000000..9955e9de5a462cabca85879f28d87c4d1e8137cf
--- /dev/null
+++ "b/\347\216\213\351\235\226\350\214\271/20241127-razor.md"
@@ -0,0 +1,36 @@
+### Razor的基本概念
+定义: Razor是一种标记语法,允许开发者在HTML中嵌入C#代码。它通过使用@符号来转换HTML和C#代码
+
+文件扩展名: 通常,Razor视图文件使用.cshtml扩展名,这意味着这些文件包含HTML和C#代
+
+### Razor的主要功能
+1.
+嵌入C#代码:
+Razor支持在HTML中直接编写C#代码,使得开发者可以动态生成内容。例如,可以使用@DateTime.Now来显示当前日期和时间
+
+2.
+表达式和代码块:
+隐式表达式: 以@开头,后跟C#代码,如@Model.Property。
+显式表达式: 使用@()包裹C#表达式,以确保表达式正确解析。例如,@(Model.Property + 1)
+
+代码块: 使用@{}来包含多行C#代码,这些代码不会直接输出到HTML中,而是用于逻辑处理
+
+3.
+数据绑定:
+Razor支持与模型(Model)的双向数据绑定,允许视图直接访问和显示模型数据。这在MVC模式中非常有用,因为它简化了数据传递和显示的过程
+
+4.
+布局和部分视图:
+Razor支持布局(Layouts)和部分视图(Partial Views),这使得开发者可以重用代码并保持一致的页面结构。例如,可以使用_Layout.cshtml来定义页面的通用结构
+
+5.
+控制结构:
+Razor支持C#的控制结构,如@if、@for、@foreach等,这些结构允许开发者在视图中实现复杂的逻辑
+
+### Razor的优势
+
+简洁性: Razor语法简洁,易于学习和使用,尤其对于熟悉C#的开发者来说。
+
+灵活性: 通过支持C#代码,Razor提供了强大的功能来处理复杂的业务逻辑和数据处理。
+
+集成性: 与ASP.NET Core MVC无缝集成,提供了高效的视图渲染能力。
\ No newline at end of file
diff --git "a/\347\216\213\351\235\226\350\214\271/20241202-MVC\347\274\226\350\276\221\346\223\215\344\275\234&linq\347\273\247\346\211\277\346\237\245\350\257\242.md" "b/\347\216\213\351\235\226\350\214\271/20241202-MVC\347\274\226\350\276\221\346\223\215\344\275\234&linq\347\273\247\346\211\277\346\237\245\350\257\242.md"
new file mode 100644
index 0000000000000000000000000000000000000000..353d53d7bebc9a425f6da6dd50b4272f13137178
--- /dev/null
+++ "b/\347\216\213\351\235\226\350\214\271/20241202-MVC\347\274\226\350\276\221\346\223\215\344\275\234&linq\347\273\247\346\211\277\346\237\245\350\257\242.md"
@@ -0,0 +1,19 @@
+## Linq集成查询
+
+ 作用在谁的身上:集合
+ 特别是实现了IEnumerable接口的集合上,方法参数中,一般是Lambda表达式(其实就是匿名函数)
+
+查询单个元素
+
+ First() 函数中可以写查找第一个的条件,形如(t => t.Id==id)。但是如果没有第一个元素,或者没有符合条件的第一个元素,则报错
+ FirstOrDefault() 类似上面的用法,但是在没有符合条件的时候,不报错,而是返回一个null
+ var s=Two.Student.FirstOrDefault(t=>t.Id==id);
+查询多个元素
+
+ Where() 条件函数,可以查找符合一定条件(可多个)的元素,返回的是一个集合
+ var s = Two.Student.Where(x=>x.Id == id && x.Author == "可可");
+重新返回的数据类型
+
+ Select() 这个函数可帮助我们处理函数返回的真正内容
+ // 可重命名,也可以直接写{ x.Id, x.Author }
+ var s =Two.Student.Select(x => new { Xyz = x.Id, Abc = x.Author });
diff --git "a/\347\216\213\351\235\226\350\214\271/20241204-MVC\345\210\240\351\231\244\346\237\245\346\211\276.md" "b/\347\216\213\351\235\226\350\214\271/20241204-MVC\345\210\240\351\231\244\346\237\245\346\211\276.md"
new file mode 100644
index 0000000000000000000000000000000000000000..8d806b6292200b664208062559da36919e874423
--- /dev/null
+++ "b/\347\216\213\351\235\226\350\214\271/20241204-MVC\345\210\240\351\231\244\346\237\245\346\211\276.md"
@@ -0,0 +1,108 @@
+## 查找
+模型:Student模型包含学生的基本信息,如学号、姓名等。同时,模型还包含一个查询方法来获取所有学生的信息
+
+视图:视图可以是一个HTML页面,它包含一个表格来展示所有学生的信息。表格的每一行都对应一个学生的信息
+
+控制器:StudentController控制器包含一个方法来处理用户的查找请求。该方法会调用Student模型的查询方法来获取所有学生的信息,并将信息传递给视图进行展示
+```csharp
+
+ @* *@
+
+
+
+
+
+
+
+
+
+
+ @foreach (var blog in @Model)
+ {
+
+ | @blog.Id |
+ @blog.Title |
+ @blog.Content |
+ @blog.Author |
+
+ @*
+ *@
+ 编辑
+ 删除
+ |
+
+ }
+
+
+
+```
+
+
+## 删除
+
+模型:Student模型包含一个删除方法,该方法接受一个学号作为参数,并删除对应的学生信息
+
+视图:视图可以是一个HTML页面,它包含一个表格来展示所有学生的信息。每个学生的信息旁边都有一个删除按钮。当用户点击删除按钮时,浏览器会发送一个包含学号的请求到服务器
+
+控制器:StudentController控制器包含一个方法来处理用户的删除请求。该方法会接收学号参数,调用Student模型的删除方法来删除对应的学生信息,并选择一个包含成功消息的视图来通知用户
+
+
+
+```csharp
+@model Blog.Models.Blogs;
+
+你真的要删除以下元素吗?
+
+
+
+ | 标题: |
+ @Model.Title |
+
+
+ | 内容: |
+ @Model.Content |
+
+
+ | 作者: |
+ @Model.Author |
+
+
+ |
+ 删除
+ @* *@
+ |
+
+ 取消删除
+ |
+
+
+```
+
+`注意事项`
+数据验证:在删除操作之前,应该进行必要的数据验证,以确保用户真的想要删除指定的数据。这可以通过在视图中添加确认提示或在控制器中进行参数验证来实现
+
+事务管理:如果删除操作涉及多个数据库表或复杂的业务逻辑,应该考虑使用事务管理来确保数据的一致性和完整性
+
+错误处理:在查找和删除操作中,应该进行错误处理,以捕获和处理可能出现的异常或错误情况。这可以通过在控制器中添加异常处理代码或使用框架提供的错误处理机制来实现
+
+
+
diff --git "a/\347\216\213\351\235\226\350\214\271/\346\235\202\344\270\203\346\235\202\345\205\253\344\270\234\350\245\2772/12.4\346\237\245\346\211\276.txt" "b/\347\216\213\351\235\226\350\214\271/\346\235\202\344\270\203\346\235\202\345\205\253\344\270\234\350\245\2772/12.4\346\237\245\346\211\276.txt"
new file mode 100644
index 0000000000000000000000000000000000000000..17b5224938b54de9e42a82aa169d20d18e84337d
--- /dev/null
+++ "b/\347\216\213\351\235\226\350\214\271/\346\235\202\344\270\203\346\235\202\345\205\253\344\270\234\350\245\2772/12.4\346\237\245\346\211\276.txt"
@@ -0,0 +1,62 @@
+
+## 重要代码
+
+```csharp
+1.
+int[] numbers = { 1, 2, 3, 4, 5, 6 };
+var result = numbers.Where(n => n == 5).ToArray();
+
+2.int[] numbers = { 1, 2, 3, 4, 5, 6 };
+var result = numbers.Where(n => n >= 2 && n <= 8).ToArray();
+
+3.int[] numbers = { 1, 2, 3, 4, 5, 6 };
+var result = numbers.Select(n => n * 2).ToArray();
+
+
+4.List students = new List
+{
+ new Student {Id=1, Name = "王有才", Age = 21 },
+ // ...
+};
+var result = students.Where(s => s.Name.StartsWith("王")).ToList();
+
+
+5.List students = new List
+{
+ new Student {Id=1, Name = "王有才", Age = 21 },
+ // ...
+};
+var result = students.Where(s => s.Age > 20).OrderByDescending(s => s.Age).ToList();
+
+
+6.int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+var result = numbers.Distinct().ToArray();
+
+7.int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+var result = numbers.FirstOrDefault(n => n > 3);
+
+
+8.int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+var result = numbers.Reverse().FirstOrDefault(n => n < 7);
+
+9.int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+var result = numbers.Any(n => n > 10);
+
+10.int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+var result = numbers.Count(n => n > 5);
+
+11.int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+var result = numbers.Sum();
+
+12.int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+var result = numbers.Max();
+
+
+13.int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+var result = numbers.Min();
+
+14.int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+var result = numbers.Average();
+
+
+```
\ No newline at end of file