diff --git "a/\351\222\237\345\230\211\345\246\256/20241119--Debian\351\203\250\347\275\262MVC.md" "b/\351\222\237\345\230\211\345\246\256/20241119--Debian\351\203\250\347\275\262MVC.md" new file mode 100644 index 0000000000000000000000000000000000000000..ad97ed02426df38afbf8ea172c712f5d2aaef2cc --- /dev/null +++ "b/\351\222\237\345\230\211\345\246\256/20241119--Debian\351\203\250\347\275\262MVC.md" @@ -0,0 +1,25 @@ +# 登陆服务器 +1. ssh root@域名 +2. 安装nginx apt install -y ninx +3. 测试 systemctl status nginx +4. 安装sdk +#(官网下载8.0版本) 更新软件源 apt update + +# 创建一个新的文件夹 +#命令:mkdir [文件夹名] + +查看当前目录下的文件和文件夹 +命令:ls +打包程序 +dotnet publish + +配置 Nginx 反向代理 +server { + listen 80; + server_name 域名或者IP; + + location / { + proxy_pass http://localhost:5000; + } +} +检查是否有语法错误:nginx -t 重新加载配置:nginx -s reload \ No newline at end of file diff --git "a/\351\222\237\345\230\211\345\246\256/20241121-MVC\346\216\247\345\210\266\345\231\250.md" "b/\351\222\237\345\230\211\345\246\256/20241121-MVC\346\216\247\345\210\266\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..0f6de8d4f932fe049d74dc5001bf1976ad358f4a --- /dev/null +++ "b/\351\222\237\345\230\211\345\246\256/20241121-MVC\346\216\247\345\210\266\345\231\250.md" @@ -0,0 +1,19 @@ +# 通过路由传递参数: +在控制器的Action中,你可以通过在路由模板中定义参数来接收参数。 + +# 通过表单传递参数: +当使用表单提交数据时,可以通过模型绑定将表单字段绑定到Action方法的参数。 + + + +# 通过FromBody传递参数: +对于使用HTTP POST或PUT方法提交的JSON或XML数据,可以使用[FromBody]属性来接收数据。 + + +# 通过查询字符串传递参数: +当参数通过URL的查询字符串传递时,你可以在Action方法中通过参数接收它们。 + + +# 通过Header传递参数: +可以通过[FromHeader]属性来获取HTTP请求头中的参数。 + diff --git "a/\351\222\237\345\230\211\345\246\256/202411222-\346\216\247\345\210\266\345\231\250.md" "b/\351\222\237\345\230\211\345\246\256/202411222-\346\216\247\345\210\266\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..3b679a015bb18a17a19f358c7e97cdc3ed8d6e08 --- /dev/null +++ "b/\351\222\237\345\230\211\345\246\256/202411222-\346\216\247\345\210\266\345\231\250.md" @@ -0,0 +1,8 @@ +控制器返回类型 +一般数据类型直接返回 如int、double、string、IEnumerable等数据类型 +IActionResult 一个接口,用于返回HTTP信息状态,如200、401、404等 +视图 +重定向 +ActionResult类型 将一般数据类型和HTTP状态信息混合使用 +特定于格式的操作结果:如JsonResult和ContentResult +POCO(普通旧CLR对象) \ No newline at end of file diff --git "a/\351\222\237\345\230\211\345\246\256/image.png" "b/\351\222\237\345\230\211\345\246\256/image.png" deleted file mode 100644 index b17dd1c19d245de73c3e457c4025aedf72ad928f..0000000000000000000000000000000000000000 Binary files "a/\351\222\237\345\230\211\345\246\256/image.png" and /dev/null differ diff --git "a/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/MVC\347\273\203\344\271\240.md" "b/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/MVC\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..d96178421826b5b7897c4be8bee9e2b3915522e6 --- /dev/null +++ "b/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/MVC\347\273\203\344\271\240.md" @@ -0,0 +1,348 @@ +# MVC练习 +1、创建一个控制台项目 +dotnet new console + +2、创建一个控制项目,项目名称Blog +dotnet new console -n Blog + +3、创建一个控制台项目,输出到Blog目录 +dotnet new console -o Blog + +4、创建一个MVC项目,指定项目名称 +dotnet new mvc -n Blog + +5、创建一个MVC项目,指定输出目录 +dotnet new mvc -o BlogDir + +6、创建一个带解决方案,其下有一个MVC项目,3个类库项目的“综合项目” +dotnet new sln -n Solution + +MVC项目: dotnet new mvc -n Blog + +类库: dotnet new classlib -n ClassLib1 dotnet new classlib -n ClassLib2 dotnet new classlib -n ClassLib3 + +7、创建一个项目,在默认控制器(Home)下,新增一个Action方法,名为Ok,同时为其创建对应视图以显示这个视图 +创建项目 dotnet new mvc -n Blog + + ``` + public IActionResult Ok() + { + return View(); + } + ``` + +创建对应视图 Views/Home/Ok.cshtml + +![alt text](image-1.png) + +8、创建一个项目,创建一个新的控制器,名为Blogs,新的控制器拥有一个名为Index的Action,该方法返回一个视图,视图显示“神级预判” + +![alt text](image-2.png) +``` + public class BlogsController : Controller + { + public IActionResult Index() + { + return View(); + } + } + ``` + ![alt text](image.png) +创建对应视图Views/Blogs/Index.cshtml +``` +

神级预判

+ +``` +9、给第8题的新控制,添加一个新的Action,名为Music,不接受任何参数,并返回对应的视图,视图显示“顶级打野” + +``` + public IActionResult Music() + { + return View(); + } +``` +![alt text](image-3.png) +创建对应视图Views/Blogs/Music.cshtml +``` +顶级打野 +``` +10、给第8题的新控制器,新增一个Action,名为List,不接受任何参数,并返回对应视图,视图显示一个经典CRUD界面 +``` + public IActionResult List() + { + return View(); + } + ``` +创建对应视图Views/Blogs/List.cshtml + +11、新增一个控制器,名为Products,该控制器具有一个名为Edit的Action,这个Action接受一个int类型的参数id,显示这个id +``` +public class ProductsController : Controller +{ + public IActionResult Edit(int id) + { + ViewBag.Id = id; + return View(); + } +} +``` +创建对应视图Views/Products/Edit.cshtml +``` +

Edit Product

+

编辑的产品ID:@ViewBag.Id

+ +``` +12、在11题的新控制器中,新增一个名为Create的Action,该Action接受一个类型为Students(有姓名、年龄、体长属性)的参数,并展示该参数的姓名属性 + +``` +public class ProductsController : Controller{ + public IActionResult Create(){ + var pro=new ProductStudent{ + Name="宋颂", + Age="20", + Tall="186" + }; + return View(pro); +} + } + public class ProductStudent{ + public string Name{get;set;}=null!; + public string Age{get;set;}=null!; + public string Tall{get;set;}=null!; + + } + + ``` + +# 专项练习-控制器传参 + + ``` +1、简单参数传递 在一个叫Blog控制器中,定义一个叫Index的Action,并且传递一个int类型的值,id为变量名 + + + public class BlogController : Controller + { + public IActionResult Index(int id) + { + return Content(id.ToString) + } + + } + + ``` + + +2、简单参数传递 在一个叫Blog控制器中,定义一个叫Index_2的Action,并且传递一个string类型的值,id为变量名 + + + ``` +public class BlogController : Controller + { + + public IActionResult Index_2(string id) + { + return Content(id) + } + + } + + ``` +3、简单参数传递 在一个叫Blog控制器中,定义一个叫Index_3的Action,并且传递一个string类型的值,name为变量名 + + + ``` +public class BlogController : Controller + { + public IActionResult Index_3(string name) + { + return Content(name) + } + } + + + ``` +4、复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create的Action,并且传递一个BlogCreateDto类型的值,blogCreateDto为变量名 +PS BlogCreateDto类型具有Title、Author、Content自动属性 + + + ``` + +public class BlogController : Controller + { + [HttpPost] + public IActionResult Create([FromBody] BlogCreateDto blogCreateDto){ + + return Content(blogCreateDto.Title) + } + + public class BlogCreateDto{ + + //BlogCreateDto类型具有Title、Author、Content自动属性 + public string Title{get;set;}=null!; + public string Author{get;set;}=null!; + public string Content{get;set;}=null!; + } + } + + + ``` +5、复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create_1的Action,并且传递一个Products类型的值,productCreateDto为变量名 +PS Products类型具有Name、Price、Stock自动属性 + + + ``` + + public class BlogController : Controller + { + [HttpPost] + public IActionResult Create([FromBody] Products productCreateDto){ + return Content(blogCreateDto.Title) + } + //PS Products类型具有Name、Price、Stock自动属性 + public class Products{ + public string Name{get;set;}=null!; + public string Price{get;set;}=null!; + public string Stock{get;set;}=null!; + } + } + + + ``` +6、复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create_2的Action,并且传递一个Students类型的值,studentCreateDto为变量名 +PS Students类型具有StudentName、Sex、Age自动属性 + + + ``` + + public class BlogController : Controller + { + public class BlogContriller : Controller{ + [HttpPost] + public IActionResult Create_2([FromBody] Students studentCreateDto){ + return Content(blogCreateDto.Title) + } + } + public class Students{ + public string Name{get;set;}=null!; + public string Price{get;set;}=null!; + public string Stock{get;set;}=null!; + } + } + + + ``` + + # 专项练习-基础能力 + +1、生成一个随机整数,范围[0,100],注意是否包含 + ``` +Random random = new Random(); +int number1 = random.Next(0, 101); + ``` +2、生成一个随机整数,范围(0,100],注意是否包含 + ``` +int number2 = random.Next(1, 100); + ``` +3、生成10个随机整数,范围[5,80],注意是否包含 + ``` +int[] numbers3 = new int[10]; +for (int i = 0; i < numbers3.Length; i++) +{ + numbers3[i] = random.Next(5, 81); +} + ``` +4、定义一个字符串,字符串中有100个中文字符,需要从中随机取1个字符串 + ``` +string chineseCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +Random random = new Random(); +string oneChineseCharacter = chineseCharacters[random.Next(chineseCharacters.Length)]; + ``` +5、定义一个字符串,字符串中有100个中文字符,需要从中随机取5-50个字符,组成新的字符 + ``` +int length = random.Next(5, 51); +StringBuilder sb = new StringBuilder(); +for (int i = 0; i < length; i++) +{ + sb.Append(chineseCharacters[random.Next(chineseCharacters.Length)]); +} +string fiveToFiftyChineseCharacters = sb.ToString(); + ``` +6、定义2个字符串,第一个字符串中放百家姓,第二个字符串中放中文字符,要求从第一个字符串随机取得一个姓,再从第二个字符串中随机获得1到2个字符组成新字符串,和第一个字符串取得的姓组成一个姓名 + ``` +string surnames = "刘赵钱孙李周吴郑王冯陈卫蒋沈韩杨"; +string givenNames = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +int surnameIndex = random.Next(surnames.Length); +string surname = surnames[surnameIndex].ToString(); +int givenNameLength = random.Next(1, 3); +StringBuilder givenNameSb = new StringBuilder(); +for (int i = 0; i < givenNameLength; i++) +{ + givenNameSb.Append(givenNames[random.Next(givenNames.Length)]); +} +string givenName = givenNameSb.ToString(); +string name = surname + givenName; + ``` +7、利用以上方法,随机生成100个BlogCreateDto类型(有Title、Author、Content属性)的对象,其中的内容都是随机生成且长度不定,并将其渲染到视图 + ``` +public class BlogCreateDto +{ + public string Title { get; set; } + public string Author { get; set; } + public string Content { get; set; } +} + +List blogs = new List(); +for (int i = 0; i < 100; i++) +{ + BlogCreateDto blog = new BlogCreateDto + { + Title = GenerateRandomString(10, 50), // 随机标题长度10-50 + Author = name, // 使用上面生成的姓名 + Content = GenerateRandomString(100, 1000) // 随机内容长度100-1000 + }; + blogs.Add(blog); +} + +string GenerateRandomString(int minLength, int maxLength) +{ + StringBuilder contentSb = new StringBuilder(); + int contentLength = random.Next(minLength, maxLength + 1); + for (int i = 0; i < contentLength; i++) + { + contentSb.Append(chineseCharacters[random.Next(chineseCharacters.Length)]); + } + return contentSb.ToString(); +} + ``` + + # 专项练习-控制器返回值 + 1、渲染简单数据到页面 + ![alt text](88c6bce7189d004e4998bd3d2a4bbf2.png) + +2.渲染复杂数据到页面 + ![alt text](88c6bce7189d004e4998bd3d2a4bbf2.png) + + 3.渲染集合数据到页面 + ``` + public IActionResult CollectionView() +{ + CollectionViewModel model = new CollectionViewModel + { + Items = new List { "Item1", "Item2", "Item3" } + }; + return View(model); +} + +``` +``` + +@model YourNamespace.CollectionViewModel + +
    + @foreach (var item in Model.Items) + { +
  • @item
  • + } +
+ +``` \ No newline at end of file diff --git "a/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/img/88c6bce7189d004e4998bd3d2a4bbf2.png" "b/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/img/88c6bce7189d004e4998bd3d2a4bbf2.png" new file mode 100644 index 0000000000000000000000000000000000000000..709b8c315a681d97f374c03febfa0132c9810d3a Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/img/88c6bce7189d004e4998bd3d2a4bbf2.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/img/image-1.png" "b/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/img/image-1.png" new file mode 100644 index 0000000000000000000000000000000000000000..54b050d78ec8652699b709da197b148f41e9e701 Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/img/image-1.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/img/image-2.png" "b/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/img/image-2.png" new file mode 100644 index 0000000000000000000000000000000000000000..9f72eaf3dd13ef5fe71b65f42f9ad486e9e2973c Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/img/image-2.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/img/image-3.png" "b/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/img/image-3.png" new file mode 100644 index 0000000000000000000000000000000000000000..c07759a942e7c1093caf37a9bf8976b983f6827e Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/img/image-3.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/img/image.png" "b/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/img/image.png" new file mode 100644 index 0000000000000000000000000000000000000000..c7c9335d31724c673fe93dd4421a183eb1002cf4 Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/\344\275\234\344\270\232/img/image.png" differ