From 61174fa48fc6175c639364f319bcdc576471a50d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=A8=9C?= <2977047384@qq.com> Date: Wed, 27 Nov 2024 17:39:41 +0800 Subject: [PATCH 1/2] bj --- ...36\345\200\274\347\261\273\345\236\213.md" | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 "\346\235\216\345\250\234/20241125-\350\277\224\345\233\236\345\200\274\347\261\273\345\236\213.md" diff --git "a/\346\235\216\345\250\234/20241125-\350\277\224\345\233\236\345\200\274\347\261\273\345\236\213.md" "b/\346\235\216\345\250\234/20241125-\350\277\224\345\233\236\345\200\274\347\261\273\345\236\213.md" new file mode 100644 index 0000000..845330e --- /dev/null +++ "b/\346\235\216\345\250\234/20241125-\350\277\224\345\233\236\345\200\274\347\261\273\345\236\213.md" @@ -0,0 +1,52 @@ +# Action的返回值类型 +## 常规数据类型 +- int +- string +- IList<> +## 朴实的ActionResult +所有的 Result 都派生自 ActionResult抽象类,因此 ActionResult 作为基类提供了最基础的功能,ActionResult 是一个抽象类,其声明如下: +```c# +public abstract class ActionResult { + + public abstract void ExecuteResult(ControllerContext context); +} +``` +*ActionResult 返回响应的状态码:200,301,401,404,500等* + +看看普通人民、相貌平平的`ActionResult`,`ActionResult` 是个朴素老百姓,没啥特长,就一个 `ExecuteResult()` 抽象方法,这个`ExecuteResult()` 抽象方法还啥都不干,遗传给儿女孙子们让它们去发挥,那么它的责任其实就很明确了,它就是为遗传作准备的,繁殖下一代用的。因为`ActionResult`是所有`Result`的基类,因此你可以在所有的`Action`上使用它作为返回值类型,而无需动脑筋来明确与返回值相同的类型。 + +## ContentResult +ContentResult用于将字符串直接向客户端输出。ContentResult的ExecuteResult方法实际上是调用了 Response.Write( string… ),输入并无特别之处,但是在 ASP 时代,这个Response.Write() 却是可以纵横页面。从输出一个简单的字符串到整个页面,Response.Write()都能胜任,所以ContentResult显得特别强大: +```c# +public override void ExecuteResult(ControllerContext context) { + +if (context == null) { + +throw new ArgumentNullException("context"); + +} + +HttpResponseBase response = context.HttpContext.Response; + +if (!String.IsNullOrEmpty(ContentType)) { + + response.ContentType = ContentType; + +} + +if (ContentEncoding != null) { + + response.ContentEncoding = ContentEncoding; + + } + +if (Content != null) { + + response.Write(Content); + + } + +} +``` +## JsonResult +JsonResult首先将指定的对象序列化为Json字符串,然后将字符串写入到HTTP输出流。撇开对象序列化为Json字符串这一过程,实际上与ContentResult其实是一样的,因为JsonResult与ContentResult都是调用Response.Write()向HTTP输出流写入一些内容. -- Gitee From 14574af2f0d9b1f318e5333a05e71fc5823a7eb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8B=B8=E7=99=BC=E7=99=BC?= <2977047384@qq.com> Date: Sun, 1 Dec 2024 18:07:50 +0800 Subject: [PATCH 2/2] biji --- ...36\345\200\274\347\261\273\345\236\213.md" | 93 ++++++++++ ...5\222\214Razor\350\257\255\346\263\225.md" | 163 ++++++++++++++++++ ...76\345\242\236\345\210\240\346\224\271.md" | 47 +++++ 3 files changed, 303 insertions(+) create mode 100644 "\346\235\216\345\250\234/20241127-\351\232\217\346\234\272\346\225\260\345\222\214Razor\350\257\255\346\263\225.md" create mode 100644 "\346\235\216\345\250\234/20241129-\350\241\250\346\240\274\350\241\250\345\215\225\350\247\206\345\233\276\345\242\236\345\210\240\346\224\271.md" diff --git "a/\346\235\216\345\250\234/20241125-\350\277\224\345\233\236\345\200\274\347\261\273\345\236\213.md" "b/\346\235\216\345\250\234/20241125-\350\277\224\345\233\236\345\200\274\347\261\273\345\236\213.md" index 845330e..202b064 100644 --- "a/\346\235\216\345\250\234/20241125-\350\277\224\345\233\236\345\200\274\347\261\273\345\236\213.md" +++ "b/\346\235\216\345\250\234/20241125-\350\277\224\345\233\236\345\200\274\347\261\273\345\236\213.md" @@ -50,3 +50,96 @@ if (Content != null) { ``` ## JsonResult JsonResult首先将指定的对象序列化为Json字符串,然后将字符串写入到HTTP输出流。撇开对象序列化为Json字符串这一过程,实际上与ContentResult其实是一样的,因为JsonResult与ContentResult都是调用Response.Write()向HTTP输出流写入一些内容. + +# 作业 +## 基础能力 +### 1.生成一个随机整数,范围[0,100],注意是否包含 +```cs +public IActionResult Index() +{ + Random random = new Random(); + int randomNumber = random.Next(0, 101); + return View(randomNumber); +} +``` +### 2.生成一个随机整数,范围(0,100],注意是否包含 +```cs + +public IActionResult Index_2() +{ + Random random = new Random(); + int randomNumber = random.Next(1, 101); + return View(randomNumber); +} +``` +### 3.生成10个随机整数,范围[5,80],注意是否包含 +```cs +public IActionResult Index_3() +{ + Random random = new Random(); + List Numbers = new List(); + for (int i = 0; i < 10; i++) + { + int num = random.Next(5, 81); + Numbers.Add(num); + } + return View(randomNumbers); +} +``` +### 4.定义一个字符串,字符串中有100个中文字符,需要从中随机取1个字符串 +```cs +public IActionResult Index_4() +{ + string str = "割趟貌莲逐螺棋苗烦贫梅剥梳慢揭库改瘦手船兆设先舰白怀池昏统放银碑亚喇叶非霞织施窗耕泛圾茧仙壳躬病枪芳级幻势魂摊浇懒升搁朗拳具值披嚼宫典装晕支夹晴童跑喇除暂贩散注铸鸭仇握境参相枝公烛残归翁鹰闭物何修设问"; + // 创建Random对象 + Random random = new Random(); + char Chinese = str[random.Next(str.Length)]; + + return View(Chinese); +} +``` +### 5.定义一个字符串,字符串中有100个中文字符,需要从中随机取5-50个字符,组成新的字符 +```cs +public ActionResult Index_5() +{ + string str = "割趟貌莲逐螺棋苗烦贫梅剥梳慢揭库改瘦手船兆设先舰白怀池昏统放银碑亚喇叶非霞织施窗耕泛圾茧仙壳躬病枪芳级幻势魂摊浇懒升搁朗拳具值披嚼宫典装晕支夹晴童跑喇除暂贩散注铸鸭仇握境参相枝公烛残归翁鹰闭物何修设问"; + Random random = new Random(); + int length = random.Next(5, 51); + // 随机选择字符并组成新的字符串 + string newStr = ""; + for (int i = 0; i < length; i++) + { + int index = random.Next(str.Length); + newStr += str[index]; + } + ViewBag.NewStr = newStr; + + return View(); +} +``` +### 6.定义2个字符串,第一个字符串中放百家姓,第二个字符串中放中文字符,要求从第一个字符串随机取得一个姓,再从第二个字符串中随机获得1到2个字符组成新字符串,和第一个字符串取得的姓组成一个姓名 + +```cs +public IActionResult Index_6() +{ + // 定义包含百家姓的字符串 + string names = "赵,钱,孙,李,周,吴,郑,王,冯,陈,褚,卫,蒋,沈,韩,杨,朱,秦,尤,许,何,吕,施,张,孔,曹,严,华,金,魏,陶,姜,戚,谢,邹,喻,柏,水,窦,章,云,苏,潘,葛,奚,范,彭,郎,鲁,韦,昌,马,苗,凤,花,方,俞,任,袁,柳,酆,鲍,史,唐,费,廉,岑,薛,雷,贺,倪,汤,滕,殷,罗,毕,郝,邬,安,常,乐,于,时,傅,皮,卞,齐,康,伍,余,元,卜,顾,孟,平,黄,和,穆,萧,尹,姚,邵,湛,汪,祁"; + // 定义包含中文字符的字符串 + string chineseChars = "割趟貌莲逐螺棋苗烦贫梅剥梳慢揭库改瘦手船兆设先舰白怀池昏统放银碑亚喇叶非霞织施窗耕泛圾茧仙壳躬病枪芳级幻势魂摊浇懒升搁朗拳具值披嚼宫典装晕支夹晴童跑喇除暂贩散注铸鸭仇握境参相枝公烛残归翁鹰闭物何修设问"; + Random random = new Random(); + string[] arrNames = names.Split(','); + string Dname = arrNames[random.Next(arrNames.Length)]; + // 随机选择1到2个中文字符 + int count = random.Next(1, 3); + string SName = ""; + for (int i = 0; i < count; i++) + { + int index = random.Next(chineseChars.Length); + SName += chineseChars[index]; + } + string name = Dname + SName; + ViewBag.name = name; + + return View(); +} +``` \ No newline at end of file diff --git "a/\346\235\216\345\250\234/20241127-\351\232\217\346\234\272\346\225\260\345\222\214Razor\350\257\255\346\263\225.md" "b/\346\235\216\345\250\234/20241127-\351\232\217\346\234\272\346\225\260\345\222\214Razor\350\257\255\346\263\225.md" new file mode 100644 index 0000000..0cfdec3 --- /dev/null +++ "b/\346\235\216\345\250\234/20241127-\351\232\217\346\234\272\346\225\260\345\222\214Razor\350\257\255\346\263\225.md" @@ -0,0 +1,163 @@ +# MVC中的随机数和Razor语法 + +## 随机数生成 +- **随机数的范围**:`Random.Next(minValue, maxValue)`方法可以生成一个指定范围内的随机整数,其中`minValue`是包含的,`maxValue`是不包含的。 +- **包含与不包含**:要包含`maxValue`,需要传入`maxValue + 1`作为参数。 + +### 随机字符串生成 +- **字符串构造**:可以使用一个包含所有可能字符的字符串,然后通过随机索引来选择字符。 +- **随机长度**:通过生成一个随机数来决定随机字符串的长度。 +- **中文字符**:可以使用Unicode范围来包含中文字符。 + +### 随机字符串拼接 +- **姓名生成**:可以先随机选择一个姓氏,然后随机选择一定数量的名字字符,将它们拼接起来形成完整的姓名。 +- **动态内容生成**:可以随机生成标题、作者和内容,用于模拟博客文章或其他内容。 + +## Razor语法 +### 什么是Razor? +- `Razor` 是一种标记语法,用于将基于 .NET 的代码嵌入网页中。 +- `Razor` 语法由 `Razor` 标记、`C#` 和 `HTML` 组成。 +- 包含 `Razor` 的文件通常具有 `.cshtml` 文件扩展名。 也可在 Razor 组件 文件 (.razor) 中找到 Razor。 +- `Razor` 语法类似于各种 `JavaScript` 单页应用程序 (SPA) 框架(如 Angular、React、VueJs 和 Svelte)的模板化引擎. + +### Razor怎么呈现? +默认的 `Razor` 语言为 **HTML**。 从 `Razor` 标记呈现 **HTML** 与从 **HTML** 文件呈现 **HTML** 没有什么不同。 服务器会按原样呈现 `cshtmlRazor` 文件中的 HTML 标记。 + +### 语法 +Razor 支持 C#,并使用 @ 符号从 HTML 转换为 C#。 Razor 计算 C# 表达式,并将它们呈现在 HTML 输出中。 +当 @ 符号后跟 Razor 保留关键字时,它会转换为 Razor 特定标记。 否则会转换为纯 HTML。 + +- 若要对 Razor 标记中的 @ 符号进行转义,请使用另一个 @ 符号: +```

@@Username

``` +- 在 HTML 中使用单个 @ 符号呈现:`

@Username

` +- 包含电子邮件地址的 HTML 属性和内容不将 @ 符号视为转换字符:```Support@contoso.com``` +# 作业 +## 1 +```cs +public string Index() +{ + return "简单数据类型"; +} +``` + +## 2 +```cs +public IActionResult Index_2() +{ + var list = new BlogCreateDto + { + Title="流行歌曲", + Author="易烊千玺", + Content="大花轿" + }; + + return View(list); +} +``` + +## 3 +```cs +public IActionResult Index_3() +{ + var list = new List + { + new BlogCreateDto + { + Title="流行歌曲", + Author="易烊千玺", + Content="大花轿" + }, + new BlogCreateDto + { + Title="流行歌曲", + Author="易烊千玺", + Content="大花轿" + }, + new BlogCreateDto + { + Title="流行歌曲", + Author="易烊千玺", + Content="大花轿" + }, + }; + return View(list); +} +``` +```html + + + + + + + + @foreach(var item in @Model) + { + + + + + + + } +
标题作者内容操作
@item.Title@item.Author@item.Content + + +
+``` + +## 4 +```cs +public IActionResult Index_4() +{ + var blog = new Blog + { + Title="流行歌曲", + Author="易烊千玺", + Content="大花轿", + BlogCreateDto = new List + { + new BlogCreateDto + { + Title="流行歌曲", + Author="易烊千玺", + Content="大花轿" + }, + new BlogCreateDto + { + Title="流行歌曲", + Author="易烊千玺", + Content="大花轿" + }, + } + }; + return View(blog); +} +``` +```html +

@Model.Title

+

@Model.Author

+

@Model.Content

+ +

BlogCreateDto:

+ + + + + + + + @foreach(var item in @Model.BlogCreateDto) + { + + + + + + + } +
标题作者内容操作
@item.Title@item.Author@item.Content + + +
+``` diff --git "a/\346\235\216\345\250\234/20241129-\350\241\250\346\240\274\350\241\250\345\215\225\350\247\206\345\233\276\345\242\236\345\210\240\346\224\271.md" "b/\346\235\216\345\250\234/20241129-\350\241\250\346\240\274\350\241\250\345\215\225\350\247\206\345\233\276\345\242\236\345\210\240\346\224\271.md" new file mode 100644 index 0000000..9264f37 --- /dev/null +++ "b/\346\235\216\345\250\234/20241129-\350\241\250\346\240\274\350\241\250\345\215\225\350\247\206\345\233\276\345\242\236\345\210\240\346\224\271.md" @@ -0,0 +1,47 @@ +# 实现增操作 +## 使用post将内容添加到表单 +```cs +[HttpPost] +public IActionResult Create(Blog input) +{ + var maxId = Db.Blog.Select(t => t.Id).Max(); + input.Id = maxId + 1; + Db.Blog.Add(input); + return RedirectToAction("Index"); +} +``` +## 定义模型Models +```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 + 编辑 + ``` + -- Gitee