diff --git "a/\345\220\264\345\230\211\347\216\262/20241118-\344\274\240\345\217\202\345\222\214model.md" "b/\345\220\264\345\230\211\347\216\262/20241118-\344\274\240\345\217\202\345\222\214model.md" new file mode 100644 index 0000000000000000000000000000000000000000..8b41f52f9fef695b326a66b667d968201fcb630c --- /dev/null +++ "b/\345\220\264\345\230\211\347\216\262/20241118-\344\274\240\345\217\202\345\222\214model.md" @@ -0,0 +1,118 @@ +# 笔记 +``` +//引入命名空间(但是在引入之间,如果不是sdk自带的包的话,需要先安装依赖包) +using Microsoft.AspNetCore.Mvc; +using System; + +// 新版的命名空间形式 +namespace Blog.Controllers; + +//控制器(本质其实就是1个类型,通过继承Contro1ler这个类型来获得所有关于控制器的功能) +public class BlogsController : Controller{ + // 专业名称叫action,本质上其实就是一个方法(方法三要素:方法名称、参数、返回值) + public string Index(){ + var id = 18; + return id.ToString(); + } + + public string Create(){ + var rnd = new Random(); + return rnd.Next().Tostring();//需要将int类型显式转换为字符串 + } +} +``` +## 控制器 +* 控制器:本质其实就是 一个类型,通过继承Controller这个类型来获取所有关于控制器的功能 + * 模型绑定- 如何给方法传递参数 + * Restful + * get + * get /blogs + * 获取很多博客文章列表 + * get /blogs/18 + * 获取指定id为18的博客文章 + * post post /blogs + * 新增一篇博者文章,内容在body + * put put /blogs/1 + * 修改id为1的博客,内容在在body + * delete delete /blogs/2 + * 删除id为2的博客 + * products + * get /products + * 获取商品列表 + * get /products/33 + * 获取id为33的商品信息 + * post /products + * 新路1个商品,商品信息在body中 + * put /products/99 + * 修改id为99的商品,修改信息在body中 + * delete /products/18 + * 删除id为18的商品 + * books + * get /books/13/comments + * 获取id为13的那本书的评论列表 + * post /books/13/comments + * 给id为13的那本书,新增一条评论 + * put /books/13/comments/99 + * 修改id为13的那本书的评论 + * xdelete /books/13/comments/39 + * 删除id13的那本书下,id为39的评论 + +### 传参 + +1. 第一步先定义字段 + + 在Model中创StudentsCreateDto.cs + + 内容: + ``` + namespace Blog.Models; + //第一步先定义字段 + Public class StudentsCreateDto{ + Public string StudentName{get;set;}=null!; + Public string Age{get;set;}=null!; + Public string Height{get;set;}=null!; + } + ``` + +2. 之后在控制器创建BlogsController.cs + + 内容: + ``` + Using Microsoft.AspNetCCore.Mvc; + Using Blog.Medols; + namespace Blog.Controllers; + + Public class BlogsController : Controller{ + Public IActionResult List(){ + return RedirectToAction("index"); + } + } + ``` +2.1 //使用字段(第二步) +``` +Public dynamic Index(){//序列化反序列化 +var obj = new StudentsCreateDto{ + StudentName = "小米", + Age = "18", + Height = "188" +}; +return View(obj); +} +``` + +3. 在View 创Blogs文件夹+index ++ 内容:(str是自己命名,注意分号;StudentName是Model里面定义的字段名 ) +``` +@{ + var str="文字"; + @ str; + +

@str

//文字会变一级标题 + @Model.StudentName //调用的是Model的名字字段 + + //如果是多组用foreach遍历 + @foreach(var item in @Model){ +

@item.StudentName

+ + } +} +``` + + diff --git "a/\345\220\264\345\230\211\347\216\262/20241120\344\275\234\344\270\232.md" "b/\345\220\264\345\230\211\347\216\262/20241120-\344\275\234\344\270\232.md" similarity index 97% rename from "\345\220\264\345\230\211\347\216\262/20241120\344\275\234\344\270\232.md" rename to "\345\220\264\345\230\211\347\216\262/20241120-\344\275\234\344\270\232.md" index c3950ab643fdde6c6d96d608b4df1466bdef7296..ab23235e5f9fdab524b93418d5a84d98410a7232 100644 --- "a/\345\220\264\345\230\211\347\216\262/20241120\344\275\234\344\270\232.md" +++ "b/\345\220\264\345\230\211\347\216\262/20241120-\344\275\234\344\270\232.md" @@ -152,4 +152,7 @@ namespace MyMvcProject.Controllers ``` 11. 新增一个控制器,名为Products,该控制器具有一个名为Edit的Action,这个Action接受一个int类型的参数id,显示这个id -12. 在11题的新控制器中,新增一个名为Create的Action,该Action接受一个类型为Students(有姓名、年龄、体长属性)的参数,并展示该参数的姓名属性 \ No newline at end of file +12. 在11题的新控制器中,新增一个名为Create的Action,该Action接受一个类型为Students(有姓名、年龄、体长属性)的参数,并展示该参数的姓名属性 +![20241125215621](www.wikzn.store/20241125215621.png) +![alt text](./图片/image.png) + diff --git "a/\345\220\264\345\230\211\347\216\262/20241125-\344\274\240\351\200\222\345\217\202\346\225\260.md" "b/\345\220\264\345\230\211\347\216\262/20241125-\344\274\240\351\200\222\345\217\202\346\225\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..fdf1bef3e95ee04e974892b7aac4884b7e2a9e70 --- /dev/null +++ "b/\345\220\264\345\230\211\347\216\262/20241125-\344\274\240\351\200\222\345\217\202\346\225\260.md" @@ -0,0 +1,166 @@ +# 专项练习-控制器传参 +1. 简单参数传递 在一个叫Blog控制器中,定义一个叫Index的Action,并且传递一个int类型的值,id为变量名 +``` +public class BlogsController : Controller +{ + // GET: Blog/Index/5 + public ActionResult Index(int id) + { + // 你的逻辑代码 + return View(); + } +} +``` +2. 简单参数传递 在一个叫Blog控制器中,定义一个叫Index_2的Action,并且传递一个string类型的值,id为变量名 +``` +public class BlogsController : Controller +{ + // GET: Blog/Index_2/someId + public ActionResult Index_2(string id) + { + // 你的逻辑代码 + return View(); + } +} +``` +3. 简单参数传递 在一个叫Blog控制器中,定义一个叫Index_3的Action,并且传递一个string类型的值,name为变量名 +``` +public class BlogsController : Controller +{ + // GET: Blog/Index_3/JohnDoe + public ActionResult Index_3(string name) + { + // 你的逻辑代码 + return View(); + } +} +``` +4. 复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create的Action,并且传递一个BlogCreateDto类型的值,blogCreateDto为变量名 + + + PS BlogCreateDto类型具有Title、Author、Content自动属性 + 1. 定义BlogsCreateDto类: + ``` + public class BlogCreateDto + { + public string Title { get; set; } + public string Author { get; set; } + public string Content { get; set; } + } + ``` + 2. 你可以在 Blog 控制器中定义 Create Action 方法: + ``` + public class BlogController : Controller + { + [HttpPost] // 通常用于处理POST请求 + public ActionResult Create(BlogCreateDto blogCreateDto) + { + if (ModelState.IsValid) + { + // 你的逻辑代码,例如保存blogCreateDto到数据库 + + // 操作成功后,重定向到另一个Action或返回视图 + return RedirectToAction("Success"); + } + + // 如果模型无效,返回带有错误信息的视图 + return View(blogCreateDto); + } + } + ``` +5. 复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create_1的Action,并且传递一个Products类型的值,productCreateDto为变量名 + + + PS Products类型具有Name、 Price、Stock自动属性 + 1. 定义Products类 + ``` + public class Products + { + public string Name { get; set; } + public decimal Price { get; set; } + public int Stock { get; set; } + } + ``` + + 2. 在 Blog 控制器中定义 Create_1 Action 方法: + ``` + public class BlogController : Controller + { + [HttpPost] // 通常用于处理POST请求 + public ActionResult Create_1(Products productCreateDto) + { + if (ModelState.IsValid) + { + // 你的逻辑代码,例如保存productCreateDto到数据库 + + // 操作成功后,重定向到另一个Action或返回视图 + return RedirectToAction("Success"); + } + + // 如果模型无效,返回带有错误信息的视图 + return View(productCreateDto); + } + } + ``` + +6. 复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create_2的Action,并且传递一个Students类型的值,studentCreateDto为变量名 + + + PS Students类型具有StudentName、Sex、Age自动属性 + 1. 定义Students类 + ``` + public class Students + { + public string StudentName { get; set; } + public string Sex { get; set; } // 通常性别用 "Male" 或 "Female" 表示,但这里根据你的要求使用 string 类型 + public int Age { get; set; } + } + ``` + + 2. 在 Blog 控制器中定义 Create_2 Action 方法: + ``` + public class BlogController : Controller + { + [HttpPost] // 通常用于处理POST请求 + public ActionResult Create_2(Students studentCreateDto) + { + if (ModelState.IsValid) + { + // 你的逻辑代码,例如保存studentCreateDto到数据库 + + // 操作成功后,重定向到另一个Action或返回视图 + return RedirectToAction("Success"); + } + + // 如果模型无效,返回带有错误信息的视图 + return View(studentCreateDto); + } + } + ``` +# 专项练习-基础能力 +1. mvc生成一个随机整数,范围[0,100],注意是否包含 + 1. 你需要确保你的项目中已经引入了 System 命名空间,因为 Random 类位于该命名空间下。 + ``` + using System; + + public class BlogController : Controller + { + // GET: Blog/RandomNumber + public ActionResult RandomNumber() + { + // 创建Random类的实例 + Random random = new Random(); + + // 生成一个0到100之间的随机整数,包括0和100 + int randomNumber = random.Next(0, 101); // Upper bound is exclusive, so we use 101 + + // 将随机数传递给视图 + return View(randomNumber); + } + } + ``` + 2. 可以创建一个名为 RandomNumber.cshtml 的视图文件 + ``` + @model int + +

Random Number

+

The generated random number is: @Model

+ ``` + diff --git "a/\345\220\264\345\230\211\347\216\262/20241127-\350\247\206\345\233\276.md" "b/\345\220\264\345\230\211\347\216\262/20241127-\350\247\206\345\233\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..e198773a6e07cc0e7ffb95c304101eb9683630d4 --- /dev/null +++ "b/\345\220\264\345\230\211\347\216\262/20241127-\350\247\206\345\233\276.md" @@ -0,0 +1,194 @@ +## 一、关于Action的返回值 + +1. 基础数据类型, 如int、string、List<>等等 +2. IActionResult,返回响应的状态码 + - 视图 + - 重定向 +3. ActionResult,是前面2个的结合体,意思为既可以返回基础数据类型,也可以返回响应状态 +4. 内容响应:JsonResult、ContentResult +5. POCO(比较老的类型对象) + +## 二、视图 + +1. Razor 专业说法 模版引擎 + - 大部分时候,我们都是通过View函数,传入数据(ViewModel)给视图,这样一来,视图中就可以通过@Model这个属性来取得这些数据 + + ``` + //在index写 + @{ + var str = "尝尝鱿鱼" + } + @str + +

@str

+ ``` + + - 实际上,我们可以通过声明视图模型的类型,来获得自动提示或者自动感知 +2. 在视图上显示数据的几个玩法 + - 在视图上定义简单数据,在视图上显示(在视图上定义对象数据,在视图上定义集合数据,显示的问题) + + - 后端传回来的对象数据,在视图上显示 + - 在后端传回来集合数据,在视图上显示 + +# 传参 +## 1. 第一步先定义字段 + + 在Model中创StudentsCreateDto.cs + + 内容: + ``` + namespace Blog.Models; + //第一步先定义字段 + Public class StudentsCreateDto{ + Public string StudentName{get;set;}=null!; + Public string Age{get;set;}=null!; + Public string Height{get;set;}=null!; + } + ``` + +2. 之后在控制器创建BlogsController.cs + + 内容: + ``` + Using Microsoft.AspNetCCore.Mvc; + Using Blog.Medols; + namespace Blog.Controllers; + + Public class BlogsController : Controller{ + Public IActionResult List(){ + return RedirectToAction("index"); + } + } + ``` +2.1 //使用字段(第二步) +``` +Public dynamic Index(){//序列化反序列化 +var obj = new StudentsCreateDto{ + StudentName = "小米", + Age = "18", + Height = "188" +}; +return View(obj); +} +``` + +3. 在View 创Blogs文件夹+index ++ 内容:(str是自己命名,注意分号;StudentName是Model里面定义的字段名 ) +``` +@{ + var str="文字"; + @ str; + +

@str

//文字会变一级标题 + @Model.StudentName //调用的是Model的名字字段 + + //如果是多组用foreach遍历 + @foreach(var item in @Model){ +

@item.StudentName

+ + } +} +``` +# 作业 +1. 渲染简单数据到页面 ++ Model代码: + ``` + namespace Blog.Models; + + //第一步先定义字段 + + public class StudentsCreateDto{ + public string StudentName{get;set;}=null!; + public string Age{get;set;}=null!; + public string Height{get;set;}=null!; + + } + ``` ++ 控制器代码 + ``` + //控制器 + using Microsoft.AspNetCore.Mvc; + using Blog.Models; + + namespace Blog.Controllers; + + public class BlogsController : Controller { + public IActionResult List(){ + return RedirectToAction("index"); + } + //第二步再使用Model里面的字段 + public dynamic Index(){//序列化反序列化 + + var obj= new StudentsCreateDto{ + StudentName="小米", + Age = "18", + Height ="188" + }; + return View(obj); + + } + } + ``` ++ 视图代码: + ``` + @{ + var str= "试试"; + } + @str + +

@str

+ + ``` +效果: +![20241127213836](www.wikzn.store/20241127213836.png) +2. 渲染复杂数据到页面 + Model,控制器如上; + 视图如下: + ``` + @Model.StudentName + +

@Model.Age

+ ``` +![20241127220347](www.wikzn.store/20241127220347.png) +3. 渲染集合数据到页面 ++ Model代码如上 ++ 控制器代码: + ``` + using Microsoft.AspNetCore.Mvc; + using Blog.Models; + + namespace Blog.Controllers; + + public class BlogsController : Controller { + public IActionResult List(){ + return RedirectToAction("index"); + } + + //第二步再使用Model里面的字段 + public dynamic Index(){//序列化反序列化 + var list=new List{ + new StudentsCreateDto { + StudentName="oppo", + Age = "18", + Height ="178" + }, + new StudentsCreateDto { + StudentName="vivo", + Age = "19", + Height ="178" + }, + new StudentsCreateDto { + StudentName="荣耀", + Age = "20", + Height ="155" + }, + }; + return View(list); + } + } + ``` ++ 效果: + ![20241127220105](www.wikzn.store/20241127220105.png) +3. 视图里调用: + ``` + @foreach(var item in @Model){ +

@item.StudentName

+ } + ``` \ No newline at end of file diff --git "a/\345\220\264\345\230\211\347\216\262/20241128-\351\232\217\346\234\272.md" "b/\345\220\264\345\230\211\347\216\262/20241128-\351\232\217\346\234\272.md" new file mode 100644 index 0000000000000000000000000000000000000000..cd0d9da0760968e9b889da603193d287361acae5 --- /dev/null +++ "b/\345\220\264\345\230\211\347\216\262/20241128-\351\232\217\346\234\272.md" @@ -0,0 +1,213 @@ +# 笔记 + + +# 作业 +1. 生成一个随机整数,范围[0,100],注意是否包含 +2. 生成一个随机整数,范围(0,100],注意是否包含 ++ 控制器 + ``` + using Microsoft.AspNetCore.Mvc; + using Blog.Models; + + namespace Blog.Controllers; + + public class BlogsController : Controller{ + public IActionResult Test(){ + var ranTer = new Random(); + var ranNum = ranTer.Next(0,101); + + return Content(ranNum.ToString()); + } + } + ``` + +3. 生成10个随机整数,范围[5,80],注意是否包含 + +4. 定义一个字符串,字符串中有100个中文字符,需要从中随机取1个字符串 ++ 控制器 + ``` + public class BlogsController : Controller{ + public IActionResult Test(){ + + var ranTer = new Random(); + var ranNum = ranTer.Next(0,5); + + var str = "我是新东方"; + var ranStr =str[ranNum]; + + return Content(ranStr.ToString()); + + } + } + ``` +# 随机组合姓名第六题第七题: ++ 控制器 +```c# +using Microsoft.AspNetCore.Mvc; +using Blog.Models; + +namespace Blog.Controllers; + +public class WjlController : Controller +{ + //Xing 和 Chinese 是两个私有的只读字符串字段,分别存储了百家姓和中文字符。 + private readonly string Xing = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万柯咎管卢莫经房裘缪干解应宗宣丁贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁荀羊於惠甄魏加封芮羿储靳汲邴糜松井段富巫乌焦巴弓牧隗山谷郏车侯宓蓬全郗班仰秋仲伊宫宁仇栾暴甘钭厉戎祖武符刘姜詹束龙叶幸司韶郜黎蓟薄印宿白怀蒲台从鄂索咸籍赖卓蔺屠蒙池乔阴郁胥能苍双"; + private readonly string Chinese = "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制其应上的以要大由来一九开义又应有会着活更现面且斗则要由明看能事制受后定包干能老国将义相要论据到理系及定规学管"; + + // Blogs 方法是控制器的入口点,当用户访问根url时会被调用。 + // 调用 GetRandomNames(100) 方法生成100个随机姓名。 + // 使用 View 方法将生成的姓名列表传递给视图进行渲染。 + public IActionResult Blogs() + { + var names = GetRandomNames(100); + return View(names); + } + + // GetRandomNames: + // 这是一个私有方法,用于生成指定数量的随机姓名。 + private List GetRandomNames(int count) + { + // 创建一个 Random 实例用于生成随机数。 + var random = new Random(); + + // 创建一个空的字符串列表 names 用于存储生成的姓名。 + var names = new List(); + + // 使用 for 循环生成指定数量的姓名: + for (int i = 0; i < count; i++) + { + //使用 random.Next(Xing.Length) 从 Xing 字符串中随机选择一个索引,然后使用该索引获取一个姓。 + int xingIndex = random.Next(Xing.Length);//获取随机整数 + + string surname = Xing[xingIndex].ToString(); + + //使用 random.Next(1, 3) 生成1到2之间的随机数,决定从 Chinese 中选择多少个字符。 + int charCount = random.Next(1, 3); // 随机1到2个字符 + + // 使用 random.Next(Chinese.Length - charCount + 1) 生成字符的起始索引。 + int charIndex = random.Next(Chinese.Length - charCount + 1); + + // 使用 Substring 方法从 Chinese 中提取指定数量的字符。 + string firstName = Chinese.Substring(charIndex, charCount); + names.Add(surname + firstName);//将姓和名拼接成完整的姓名,并添加到 names 列表中。 + } + + return names;//最后返回包含所有生成姓名的列表 + } +} +``` + ++ 视图: +``` +@model List +@{ + ViewData["Title"] = "名字"; +} + +

名字

+ +
    + @foreach (var name in Model) + { +
  • @name
  • + } +
+``` +# Crud列表 ++ 效果图 +![20241130231840](www.wikzn.store/20241130231840.png) +![alt text](./图片/CRUD.png) + ++ 控制器 +```c# +using Models; +using Microsoft.AspNetCore.Mvc; + +public class CredController : Controller { + public ActionResult Index(){ + var obj = new { + + title="152" + + }; + return View(obj); +} +} +``` + ++ Model +```c# +namespace Models; + +public class CredCreateDto{ + public string Title { get; set; }=null!; + public string Author { get; set; }=null!; + public string Content { get; set; }=null!; +} +``` + ++ 视图 +```c# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID标题内容作者
1222333 + 编辑| + 详情| + 删除 +
2222333 + 编辑 | + 详情 | + 删除 +
3222333 + 编辑| + 详情| + 删除 +
4222333 + 编辑| + 详情| + 删除 +
+ +@Model.title +``` \ No newline at end of file diff --git "a/\345\220\264\345\230\211\347\216\262/\345\233\276\347\211\207/CRUD.png" "b/\345\220\264\345\230\211\347\216\262/\345\233\276\347\211\207/CRUD.png" new file mode 100644 index 0000000000000000000000000000000000000000..3f767c472b455ffb4c36e69bad1e0c0dc60e439c Binary files /dev/null and "b/\345\220\264\345\230\211\347\216\262/\345\233\276\347\211\207/CRUD.png" differ diff --git "a/\345\220\264\345\230\211\347\216\262/\345\233\276\347\211\207/image.png" "b/\345\220\264\345\230\211\347\216\262/\345\233\276\347\211\207/image.png" new file mode 100644 index 0000000000000000000000000000000000000000..15414b89a50974fbc9ae117cc8b65141f074feae Binary files /dev/null and "b/\345\220\264\345\230\211\347\216\262/\345\233\276\347\211\207/image.png" differ