diff --git "a/\345\221\250\347\221\236\345\207\257/20241125\342\200\224\342\200\224mvc\345\270\270\350\247\201\347\232\204\350\277\224\345\233\236\345\200\274\347\261\273\345\236\213.md" "b/\345\221\250\347\221\236\345\207\257/20241125\342\200\224\342\200\224mvc\345\270\270\350\247\201\347\232\204\350\277\224\345\233\236\345\200\274\347\261\273\345\236\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..d8e510872d9a03085ac96b5466c4cb8b3f33acf8 --- /dev/null +++ "b/\345\221\250\347\221\236\345\207\257/20241125\342\200\224\342\200\224mvc\345\270\270\350\247\201\347\232\204\350\277\224\345\233\236\345\200\274\347\261\273\345\236\213.md" @@ -0,0 +1,131 @@ +# MVC模式中常见的Action的返回值类型 +1. 常见数据类型,如int、string、IList<> +```cs +public IActionResult Index() +{ + var list = new List + { + new BlogCreateDto + { + Title = "今天下雨", + Author = "今天下雨", + Content = "今天下雨", + }, + new BlogCreateDto + { + Title = "今天下雨", + Author = "今天下雨", + Content = "今天下雨", + }, + new BlogCreateDto + { + Title = "今天下雨", + Author = "今天下雨", + Content = "今天下雨", + }, + }; + return View(); +} + +public class BlogCreateDto +{ + public string Title{get;set;} = null!; + public string Author{get;set;} = null!; + public string Content{get;set;} = null!; +} +``` +```html + +@model List + + + + + + + + + @foreach (var item in @Model) + { + + + + + + + } +
标题作者内容操作
@item.Title@item.Author@item.Content + + +
+``` + +2. IActionResult,响应状态码,如200(请求成功,并返回了)、301、401、404(资源找不到)、500(服务器错误)等 + - 视图:除了访问该视图,还可以访问指定名称的视图 return View("视图名称") + - 重定向:return RedirectToAction("视图名称"); + +3. ActionREsult<>,可以同时返回状态或者常规数据类型 +```cs +public ActionResult Edit() +{ + var isOk = 1 == 3 ? true : false ; + if (isOk) + { + return View(); + } + else + { + return "5432"; + } +} +``` + +4. JsonResult、ContentResult,返回响应,就是纯粹的数据 + +5. POCO,可以返回一个对象,而该对象在被返回的时候会被序列化(相对应的是 反序列化--Json,相当于js的对象) + +# 作业 +## 基础能力 +### 1 +```cs +// 生成一个随机整数,范围[0,100],注意是否包含 +public IActionResult Index() +{ + Random random = new Random(); + // 101是因为Next方法生成的是min到max-1之间的数 + int randomNumber = random.Next(0, 101); + return View(randomNumber); +} +``` + +## 控制器返回值 +### 渲染简单数据到页面 +```cs +public int Index() +{ + return 1111; +} +``` + +### 渲染复杂数据到页面 +```cs +public dynamic Edit() +{ + return new {Name="张三"}; +} +``` + +### 渲染集合数据到页面 +```cs + public dynamic List() +{ + var list = new List + { + "开心", + "激动", + "难过", + "沮丧" + }; + return list; +} +``` \ No newline at end of file diff --git "a/\345\221\250\347\221\236\345\207\257/20241127\342\200\224\342\200\224\350\247\206\345\233\276.md" "b/\345\221\250\347\221\236\345\207\257/20241127\342\200\224\342\200\224\350\247\206\345\233\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..6c79979bcd74615b0120d0c3c61df69289bbf872 --- /dev/null +++ "b/\345\221\250\347\221\236\345\207\257/20241127\342\200\224\342\200\224\350\247\206\345\233\276.md" @@ -0,0 +1,41 @@ +## 渲染 +- 简单数据在视图的渲染和展示 +- 复杂数据在视图的渲染和展示 +- 集合数据在视图的渲染和展示 + +## Razor +Razor 支持 C#,并使用` @ `符号从 HTML 转换为 C#。 Razor 计算 C# 表达式,并将它们呈现在 HTML 输出中。 + +当 @ 符号后跟 Razor 保留关键字时,它会转换为 Razor 特定标记. + +### 隐式 Razor 表达式 +以 @ 开头,后跟 C# 代码。隐式表达式不能包含空格,但 C# **await** 关键字除外。不能包含 C# 泛型,因为括号 (<>) 内的字符会被解释为 HTML 标记。 + +### 显式 Razor 表达式 +由 @ 符号和平衡圆括号组成。 + +### Razor 代码块 +代码块以 @ 开始,并括在 {} 中,例如: +```CSHTML +@{ + var quote = "The future depends on what you do today. - Mahatma Gandhi"; +} +

@quote

+@{ + quote = "Hate cannot drive out hate, only love can do that. - Martin Luther King, Jr."; +} +

@quote

+``` +该代码呈现以下 HTML: +```HTML +

The future depends on what you do today. - Mahatma Gandhi

+

Hate cannot drive out hate, only love can do that. - Martin Luther King,Jr.";

+``` + +## 内置ASP.NET Core标记帮助程序--定位点 +定位点标记帮助程序可通过添加新属性来增强标准的 HTML 定位点 () 标记。 按照约定,属性名称将使用前缀 asp-。 asp- 属性的值决定呈现的定位点元素的 href 属性值 + +属性: +1. `asp-controller`:可分配用于生成 URL 的控制器。 +2. `asp-action `:属性值表示生成的 href 属性中包含的控制器操作名称。 +3. `asp-all-route-data` :支持创建键值对字典。 键是参数名称,值是参数值。 \ No newline at end of file diff --git "a/\345\221\250\347\221\236\345\207\257/20241129\342\200\224\342\200\224\345\242\236\345\212\240.md" "b/\345\221\250\347\221\236\345\207\257/20241129\342\200\224\342\200\224\345\242\236\345\212\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..31a1ee70ecd56a19cb1acd6b885aa052fafc2b25 --- /dev/null +++ "b/\345\221\250\347\221\236\345\207\257/20241129\342\200\224\342\200\224\345\242\236\345\212\240.md" @@ -0,0 +1,77 @@ +## 实现 增 操作 + +### 定义一个模型Models,模拟数据库 +1. 定义一个数据库的表 +2. 静态构造函数(只执行一次,内容如果修改,则需要重新跑) + 1) 初始化静态属性 + - 直接初始化:`public static List Blog = new List{"value1","value2"...};` + - **使用静态构造函数**(下面例子中的方法,推荐使用该方法 + - 延迟初始化 + - 使用属性初始化器 + 2) 给这个集合属性,塞进去一些内容 +```cs +public static class Db +{ + public static List Blog{get;set;} + + static Db() + { + Blog = new List(); + + for (int i = 0; i < 15; i++) + { + var tmp = new Blog + { + Id = i + 1,... + }; + + Blog.Add(tmp); + } + } +} +``` + +### 创建视图,展示内容 +1. 使用``标签展现 增删改 + ```html + 新增 + ``` +2. `asp-controller`:指定表单提交的 **目标控制器** +3. `asp-action`:指定表单提交时应该调用的控制器中的 **动作(方法)** +4. `asp-route-*`:通常与以上两个属性配合使用,便在创建表单或链接时能够自动将模型的状态或路由*参数*传递给控制器的特定动作。-id就是传递相应行的id号 + ```html + 编辑 + ``` + +### 跳转至增加页面 +1. 页面显示form表单,**一定要声明Models** +```html + +@model Blogs.Models.Blog; + +
+
+
+
+ +
+``` + +### 使用post请求,添加到表单 +1. 获取表单中最大的ID数,,方便程序在添加中自行增加Id数:`Max()方法` +2. 测试添加内容是否有被获取到:`return Content(JsonSerializer.Serialize(input))` +3. 将内容添加至表单 +```cs +[HttpPost] +public IActionResult Create(Blog input) +{ + // 获取表单中最大的ID数 + var maxId = Db.Blog.Select(t => t.Id).Max(); + // 添加后ID也增加 + input.Id = maxId + 1; + // 将添加的内容加入表单 + Db.Blog.Add(input); + return RedirectToAction("Index"); + // return Content(JsonSerializer.Serialize(input)); +} +``` \ No newline at end of file