From 943c80fe0865eda2289f563d308d1b5c0e097d10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=AB=A5=E5=AE=89=E7=90=AA?= <2689553517@qq.com> Date: Sun, 24 Nov 2024 21:10:28 +0800 Subject: [PATCH 1/2] sileyihuile --- ...345\222\214Mvc\347\273\203\344\271\240.md" | 155 ++++++++++++++++ ...50\345\222\214\350\247\206\345\233\276.md" | 70 +++++++ ...14\350\277\224\345\233\236\345\200\274.md" | 171 ++++++++++++++++++ 3 files changed, 396 insertions(+) create mode 100644 "\347\253\245\345\256\211\347\220\252/20241119-Linux\347\273\203\344\271\240\345\222\214Mvc\347\273\203\344\271\240.md" create mode 100644 "\347\253\245\345\256\211\347\220\252/20241121-\346\216\247\345\210\266\345\231\250\345\222\214\350\247\206\345\233\276.md" create mode 100644 "\347\253\245\345\256\211\347\220\252/20241122-\346\216\247\345\210\266\345\231\250\345\217\202\346\225\260\345\222\214\350\277\224\345\233\236\345\200\274.md" diff --git "a/\347\253\245\345\256\211\347\220\252/20241119-Linux\347\273\203\344\271\240\345\222\214Mvc\347\273\203\344\271\240.md" "b/\347\253\245\345\256\211\347\220\252/20241119-Linux\347\273\203\344\271\240\345\222\214Mvc\347\273\203\344\271\240.md" new file mode 100644 index 0000000..b8c2571 --- /dev/null +++ "b/\347\253\245\345\256\211\347\220\252/20241119-Linux\347\273\203\344\271\240\345\222\214Mvc\347\273\203\344\271\240.md" @@ -0,0 +1,155 @@ +# 控制器 + +## MVC架构概述 + +**MVC定义**:MVC(Model-View-Controller)是一种软件架构模式,用于分离应用程序的业务逻辑、用户界面和输入逻辑。这个模式提高了代码的可维护性和可扩展性。 + +1. **Model(模型)**: + - 负责管理应用程序的数据和业务逻辑。 + - 与数据存储(如数据库)进行交互,进行数据处理和验证。 + +2. **View(视图)**: + - 负责展示数据给用户。 + - 处理用户界面相关的元素,通常是HTML、CSS及JavaScript等。 + +3. **Controller(控制器)**: + - 作为模型和视图之间的中介。 + - 处理用户输入,更新模型和视图之间的状态。 + +## 控制器的作用 + +1. **接收请求**:控制器接收来自用户的请求(通常是HTTP请求),解析请求参数。 + +2. **调用模型**:根据请求内容,调用相应的模型层进行数据处理,如数据库查询、数据更新等。 + +3. **选择视图**:处理完请求后,控制器选择相应的视图来展示处理结果或反馈给用户。 + +4. **控制流程**:控制器决定应用程序的执行流程,比如跳转到不同的视图或执行不同的逻辑。 + +## 控制器的实现 + +1. **路由配置**: + - 在MVC框架中,通常配置路由,将特定URL映射到对应的控制器和动作(方法)。 + +2. **控制器的基本结构**: + - 控制器通常是一个类,其中的方法对应于用户请求的不同操作。 + - 常见的操作包括: + - `Create`:处理创建新的资源。 + - `Read`:读取和显示资源。 + - `Update`:更新现有资源。 + - `Delete`:删除资源。 + +## 在备案中Linux写不了 + +## 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(); + } + + +8.创建一个项目,创建一个新的控制器,名为Blogs,新的控制器拥有一个名为Index的Action,该方法返回一个视图,视图显示“神级预判” +``` +public class BlogsController : Controller + { + public IActionResult Index() + { + return View(); + } + } +``` +创建对应视图Views/Blogs/Index.cshtml + +``` +
编辑的产品ID:@ViewBag.Id
+``` +12.在11题的新控制器中,新增一个名为Create的Action,该Action接受一个类型为Students(有姓名、年龄、体长属性)的参数,并展示该参数的姓名属性 +``` +public class ProductsController : Controller{ + public IActionResult Create(){ + var pro=new ProductStudent{ + Name="想死", + Age="3", + Tall="176" + }; + return View(pro); +} + } + public class ProductStudent{ + public string Name{get;set;}=null!; + public string Age{get;set;}=null!; + public string Tall{get;set;}=null!; + + } +``` +创建对应视图Views/Products/Create.cshtml \ No newline at end of file diff --git "a/\347\253\245\345\256\211\347\220\252/20241121-\346\216\247\345\210\266\345\231\250\345\222\214\350\247\206\345\233\276.md" "b/\347\253\245\345\256\211\347\220\252/20241121-\346\216\247\345\210\266\345\231\250\345\222\214\350\247\206\345\233\276.md" new file mode 100644 index 0000000..cb0b381 --- /dev/null +++ "b/\347\253\245\345\256\211\347\220\252/20241121-\346\216\247\345\210\266\345\231\250\345\222\214\350\247\206\345\233\276.md" @@ -0,0 +1,70 @@ +# MVC 中控制器参数和视图笔记 + +## 1. 控制器参数 + +### 1.1 参数传递 +- 控制器方法通常接收来自请求的参数,这些参数可以是在 URL、表单中提交的数据或请求头中的信息。 +- 参数可以通过方法签名直接接收,也可以使用模型绑定将请求数据绑定到特定的模型类上。 + +### 1.2 模型绑定 +- ASP.NET MVC 支持模型绑定机制,可以自动将请求数据转换为特定的类型(如基本数据类型、复杂对象等)。 +- 例如: + ```csharp + public ActionResult Edit(int id, UserModel model) + { + // id 为 URL 参数,model 为表单提交的用户模型 + } + +### 1.3 路由参数 +- 路由可以设定参数,使得 URL 更具可读性并且支持 RESTful 风格。 +- 例如: +```csharp +routes.MapRoute( + name: "Product", + url: "Product/{id}", + defaults: new { controller = "Product", action = "Details" } +); +``` + +### 1.4 查询字符串 +- 控制器可以通过 Request.QueryString 访问查询字符串参数。 +- 这在处理 GET 请求时尤其有用。 + +## 2. 视图 + +### 2.1 视图的作用 +- 视图负责将模型数据转化为用户界面,通常以 HTML 形式展示。 +- 视图通常通过 Razor 视图引擎(.cshtml 文件)进行编写。 + +### 2.2 传递数据到视图 +- 使用 ViewBag 和 ViewData 传递动态数据。 +- 通过强类型视图模型传递数据,确保编译时检查。 +例如: +```csharp +public ActionResult Index() +{ + ViewBag.Message = "Welcome to my site!"; + return View(); +} +``` +``` +public ActionResult Details() +{ + var model = new ProductModel { Id = 1, Name = "Sample Product" }; + return View(model); // 视图是强类型的 +} +``` + +### 2.3 部分视图 +- 可以在视图中渲染部分视图(Partial Views),以提高代码复用性。 +- 使用 Html.Partial() 或 Html.RenderPartial() 方法。 + +### 2.4 布局 +- 使用布局文件定义页面的共同结构(如头部、底部)。 +- 使用 @RenderBody() 来指定内容区域。 + +### 2.5 HTML 帮助程序 +- ASP.NET MVC 提供了一系列 HTML 帮助程序,方便生成表单元素和链接, + +- 例如 Html.TextBoxFor() 和 Html.ActionLink()。 + diff --git "a/\347\253\245\345\256\211\347\220\252/20241122-\346\216\247\345\210\266\345\231\250\345\217\202\346\225\260\345\222\214\350\277\224\345\233\236\345\200\274.md" "b/\347\253\245\345\256\211\347\220\252/20241122-\346\216\247\345\210\266\345\231\250\345\217\202\346\225\260\345\222\214\350\277\224\345\233\236\345\200\274.md" new file mode 100644 index 0000000..25d8bab --- /dev/null +++ "b/\347\253\245\345\256\211\347\220\252/20241122-\346\216\247\345\210\266\345\231\250\345\217\202\346\225\260\345\222\214\350\277\224\345\233\236\345\200\274.md" @@ -0,0 +1,171 @@ +# MVC 控制器返回值和视图笔记 + +## 1. MVC 概述 + +MVC(模型-视图-控制器)是一种软件架构模式,用于分离应用程序的主要关注点。它将应用程序分为三个核心部分: +- **模型(Model)**:处理数据和业务逻辑。 +- **视图(View)**:负责显示数据(用户界面)。 +- **控制器(Controller)**:处理用户输入并与模型和视图进行交互。 + +## 2. 控制器的角色 + +控制器是 MVC 模式中的核心部分,负责接收请求、处理输入、调用模型并返回相应视图。控制器中的方法通常会有特定的返回类型,决定了如何与视图进行交互。 + +## 3. 控制器的返回值 + +### 3.1 返回视图 + +控制器可以返回一个视图,通常是一个 HTML 页面或模板。返回视图的方法通常使用 `View()` 方法。例如: + +```csharp +public IActionResult Index() +{ + return View(); +} +``` +### 3.2 返回数据 + +在某些情况下,控制器可能需要返回 JSON 数据,特别是在构建单页应用或 AJAX 请求时。这可以通过 Json() 方法实现。例如: + +```csharp +public IActionResult GetData() +{ + var data = new { Name = "John", Age = 30 }; + return Json(data); +} +``` + +### 3.3 重定向 +有时候,我们希望在处理请求后重定向到另一个动作或控制器。这可以通过 RedirectToAction() 方法实现。例如: + +```csharp +public IActionResult Create() +{ + // 创建数据逻辑 + return RedirectToAction("Index"); +} +``` + +### 3.4 返回状态码 +在某些情况下,您可能只想返回 HTTP 状态码。例如,当一个资源没有找到时,您可以返回 NotFound(): + +```csharp +public IActionResult GetItem(int id) +{ + var item = _repository.Find(id); + if (item == null) + { + return NotFound(); + } + return Ok(item); +} +``` + +## 4. 视图的创建 +视图是使用 HTML、CSS 和 JavaScript 创建的用户界面。视图文件通常放置在 Views 文件夹中,按照控制器的名称组织子文件夹。例如,对于 HomeController,视图文件应位于 Views/Home/ 中。 + +### 4.1 使用 Razor 语法 +ASP.NET MVC 使用 Razor 语法来生成动态 HTML。基本语法示例: + +```html +@model YourNamespace.Models.YourModel + +@Model.Description
+``` + +# 作业 + +专项练习-控制器传参 + +1.简单参数传递 在一个叫Blog控制器中,定义一个叫Index的Action,并且传递一个int类型的值,id为变量名 + +效果: + +2.简单参数传递 在一个叫Blog控制器中,定义一个叫Index_2的Action,并且传递一个string类型的值,id为变量名 + +效果: + +3.简单参数传递 在一个叫Blog控制器中,定义一个叫Index_3的Action,并且传递一个string类型的值,name为变量名 + +效果: + +4。复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create的Action,并且传递一个BlogCreateDto类型的值,blogCreateDto为变量名 +``` +PS BlogCreateDto类型具有Title、Author、Content自动属性 +``` + +效果: + +5.复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create_1的Action,并且传递一个Products类型的值,productCreateDto为变量名 +``` +PS Products类型具有Name、Price、Stock自动属性 +``` + +效果: + +6.复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create_2的Action,并且传递一个Students类型的值,studentCreateDto为变量名 +``` +PS Students类型具有StudentName、Sex、Age自动属性 +``` + +效果: + + +专项练习-基础能力 + +1.生成一个随机整数,范围[0,100],注意是否包含 + +2.生成一个随机整数,范围(0,100],注意是否包含 + +3.生成10个随机整数,范围[5,80],注意是否包含 + +4.定义一个字符串,字符串中有100个中文字符,需要从中随机取1个字符串 + +5.定义一个字符串,字符串中有100个中文字符,需要从中随机取5-50个字符,组成新的字符 + +6.定义2个字符串,第一个字符串中放百家姓,第二个字符串中放中文字符,要求从第一个字符串随机取得一个姓,再从第二个字符串中随机获得1到2个字符组成新字符串,和第一个字符串取得的姓组成一个姓名 + +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