ASP.NET Core MVC 从入门到精通之接化发(二)

随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前两篇文章的讲解,初步了解ASP.NET Core MVC项目创建,启动运行,以及ASP.NET Core MVC的命名约定,创建控制器,视图,模型,接收参数等内容,今天继续讲解ASP.NET Core MVC 数据传递到客户端等相关内容,仅供学习分享使用。

ASP.NET Core MVC 从入门到精通之接化发(二)

 

概述

 

在ASP.NET Core MVC项目中,控制器传递数据到视图,常见的有以下几种方式:

  1. ViewData,一个Key/Value键值对集合,通过ViewData可以方便的进行数据对象的存储和获取,只是ViewData获取的对象的object类型,主要进行一定的类型转换。
  2. ViewBag,一定dynamic类型对象,需要在运行时进行解析操作。
  3. Model模型,对于强类型视图,不仅可以通过模型接收参数,也可以回传数据。
  4. TempData,支持页面跳转数据传递。但也只支持一次页面跳转数据传递。

 

ViewData

 

ViewData是控制器中一个ViewDataDictionary类型的属性,用来存储Key/Value的字典集合,在控制器中可以直接使用。

 

ViewData特征

 

ViewData具有以下特征:

  • ViewData是一个继承自ViewDataDictionary类的Dictionary对象,用来从Controller向对应的View传递值。
  • ViewData的只在当前当前的请求中有效,生命周期和View相同,其值不能在多个请求 中共享。
  • 在重定向(redirection)后,ViewData中存储的变量值将变为null。
  • 在取出ViewData中的变量值是,必须进行合适的类型转换(隐式或显式)和空值检查。 

 

ViewData示例

 

通过ViewData传值,首先在控制器中对ViewData赋值,如下所示:

 1 /// <summary>
 2 /// ViewData
 3 /// </summary>
 4 /// <returns></returns>
 5 public IActionResult Test()
 6 {
 7     ViewData.Add("Name", "公子小六");
 8     ViewData.Add("Age", 20);
 9     return View();
10 }

在视图中,对ViewData中的值进行获取,在Test.cshtml中格式为@ViewData[Key],如下所示:

1 <h1>欢迎公子小六</h1>
2 <div>
3     <span>姓名:</span>
4     <span>@ViewData["Name"]</span>
5 </div>
6 <div>
7     <span>年龄:</span>
8     <span>@ViewData["Age"]</span>
9 </div>

运行测试,在浏览器中输入【https://localhost:7116/Hello/Test】,如下所示:

ASP.NET Core MVC 从入门到精通之接化发(二)

 

ViewBag

 

ViewBag是一个动态类型变量(dynamic),这是C# 4.0引入的新特性,变量类型会在运 行时进行解析。

 

ViewBag特征

 

ViewBag具有以下特征:

  • ViewBag基本上是ViewData的包装,也是用来从Controller向View来传递值的。
  • ViewBag也只在当前的请求中有效。
  • 在重定向(redirection)后,ViewBag中存储的变量值将变为null。
  • 因为ViewBag是动态类型,所以我们在取得其值时,不需要进行类型转换。

 

ViewBag示例

 

在ASP.NET Core MVC项目中,首先在控制器中对ViewBag进行赋值,如下所示:

1 public IActionResult Test2()
2 {
3     ViewBag.Name = "公子小六";
4     ViewBag.Age = 23;
5     return View();
6 }

在视图中对ViewBag中的值进行获取,格式为:ViewBag.属性名 。如下所示:

 1 @{
 2     var name = ViewBag.Name;
 3     var age = ViewBag.Age;
 4     name = name + "A";
 5     age = age + 1;
 6 }
 7 <h1>欢迎公子小六</h1>
 8 <div>
 9     <span>姓名:</span>
10     <span>@ViewBag.Name</span>
11 </div>
12 <div>
13     <span>年龄:</span>
14     <span>@ViewBag.Age</span>
15 </div>
16 <div>
17     <span>姓名:</span>
18     <span>@name</span>
19 </div>
20 <div>
21     <span>年龄:</span>
22     <span>@age</span>
23 </div>

运行测试,在浏览器中,输入网址【https://localhost:7116/Hello/Test2】,如下所示:

ASP.NET Core MVC 从入门到精通之接化发(二)

 

模型数据

 

在ASP.NET Core MVC项目中,模型的主要作用就是在控制器和视图之间进行数据交互,用来传递数据也非常简单,如下所示:

 

创建模型

 

如果要用模型进行数据交互,首先是要创建模型,创建方法在前一篇文章中有介绍,不再赘述,示例模型类如下所示:

 1 public class Student
 2 {
 3     /// <summary>
 4     /// 唯一标识
 5     /// </summary>
 6     public int Id { get; set; }
 7 
 8     /// <summary>
 9     /// 学生名称
10     /// </summary>
11     public string Name { get; set; }
12 
13     /// <summary>
14     /// 学生年龄
15     /// </summary>
16     public int Age { get; set; }
17 
18     /// <summary>
19     /// 学生性别
20     /// </summary>
21     public string Sex { get; set; }
22 }

 

控制器实例化模型

 

在控制器中对模型进行实例化,然后调用View(model)方法,如下所示:

 1 public IActionResult Index()
 2 {
 3     var student = new Student()
 4     {
 5         Id = 1,
 6         Name = "公子小六",
 7         Age = 21,
 8         Sex = ""
 9     };
10     
11     return View(student);
12 }

 

视图指定模型

 

在视图中指定模型【@model 完整类名】,获取属性值【@Model.属性名】即可,如下所示:

 1 @model  DemoCoreMVC.Models.Student
 2 <h1>欢迎公子小六</h1>
 3 <div>
 4     <span>学号:</span>
 5     <span>@Model.Id</span>
 6 </div>
 7 <div>
 8     <span>姓名:</span>
 9     <span>@Model.Name</span>
10 </div>
11 <div>
12     <span>年龄:</span>
13     <span>@Model.Age</span>
14 </div>
15 <div>
16     <span>性别:</span>
17     <span>@Model.Sex</span>
18 </div>

 

运行测试

 

在浏览器中输入网址【https://localhost:7116/Hello/】页面如下所示:

ASP.NET Core MVC 从入门到精通之接化发(二)

 

TempData

 

首先ViewData和ViewBag都是一次性传递数据,如果跳转到其他页面,则无法进行获取,那么该如才能在页面跳转后,依然可以获取内容呢,答案就是TempData。

 

TempData特征

 

TempData相比于ViewData和ViewBag,具有以下特征:

  1. TempData类型是TempDataDictionary。
  2. TempData用于把数据从一个action方法传到另一个action方法,两个action可以不再同一个controller中,也可以在同一个controller中。

 

TempData示例

 

首先有两个页面Test3,Test4,在Test3中,分别往ViewData和TempData中各自添加了一个Name名称的值。然后再让页面从Test3跳转到Test4。然后在Test4的页面中分别获取两个值。

 1 public IActionResult Test3()
 2 {
 3     ViewData.Add("Name", "公子小六1");
 4     TempData.Add("Name", "公子小六2");
 5     return View();
 6 }
 7 
 8 public IActionResult Test4()
 9 {
10 
11     return View();
12 }

视图页面内容也非常简单,如下所示:

Test3.cshtml页面内容如下:

1 <a href="~/Hello/Test4">跳转Test4</a>

Test4.cshtml页面内容,如下所示:

 1 <h1>欢迎公子小六</h1>
 2 
 3 <div>
 4     <span>姓名ViewData:</span>
 5     <span>@ViewData["Name"]</span>
 6 </div>
 7 <div>
 8     <span>姓名TempData:</span>
 9     <span>@TempData["Name"]</span>
10 </div>

运行程序,然后在浏览器中输入网址【https://localhost:7116/Hello/Test3】,如下所示:

ASP.NET Core MVC 从入门到精通之接化发(二)

由以上示例可以看出:

  1. ViewData在页面传递后,前一个Action添加的键值已经被清除。
  2. TempData中的值在页面跳转后依然保存。
  3. TempData 在第二次请求后会被清空,第三次请求则获取不到。

注意:TempData也只支持一次跨Action跳转,不支持多次跳转。

以上就是ASP.NET Core MVC从入门到精通之接化发 第二部分的全部内容,旨在抛转引玉,一起学习,共同进步。

原文链接:https://www.cnblogs.com/hsiang/p/17300484.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET Core MVC 从入门到精通之接化发(二) - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • unity通过Mesh网格绘制图形球体

    下面是Unity通过Mesh网格绘制图形球体的完整攻略: 准备工作 首先,在开始绘制球体之前,我们需要先做一些准备工作。 在Unity的场景中创建一个空物体。 给该空物体添加MeshFilter和MeshRenderer组件(如果没有的话),以便我们可以在场景中看到球体。 创建一个新的C#脚本,并将其命名为“MeshCreator”(我们需要用它来实现网格绘…

    C# 2023年6月3日
    00
  • 实例分享C#中Explicit和Implicit用法

    实例分享C#中Explicit和Implicit用法 在C#中,我们可以通过两种方式定义类型转换:Implicit(隐式)和Explicit(显式)。 Implicit转换: 由编译器自动进行,不需要通过任何显式的转换操作符来触发。 Explicit转换: 需要使用显式的转换操作符来触发,否则编译器会报错。 本文将通过两个示例,详细讲解C#中的Explici…

    C# 2023年5月15日
    00
  • Unity实现多平台二维码扫描

    下面我就来详细讲解一下“Unity实现多平台二维码扫描”的完整攻略。 步骤一:安装生成二维码工具 本方案使用ZXing工具包,ZXing是一个基于Java的支持多格式条形码的开源工具库,支持的格式包括:一维码、二维码、QR码等常见条码格式。我们需要先安装ZXing工具包。 ZXing的安装很简单,直接在Unity项目中的Asset Store中搜索ZXing…

    C# 2023年5月31日
    00
  • C#实现在线更新软件

    C#实现在线更新软件攻略 在C#应用程序开发过程中,实现在线更新软件是一项非常重要的功能。本篇文章将带领您逐步了解C#实现在线更新软件的完整攻略,以及两条示例说明。 步骤一:生成更新配置文件 在你的应用程序根目录中创建一个“Config.xml”文件。 在“Config.xml”文件中添加“”标签。 添加程序的各个版本号和各版本对应的下载地址。 示例代码: …

    C# 2023年6月1日
    00
  • PHP、JAVA、.NET这三种技术的区别分析

    PHP、JAVA、.NET的区别分析 PHP、JAVA、.NET是三种常见的编程技术,它们各自有着不同的特点和应用场景。以下是它们的区别分析: 1. PHP PHP是一种开源的服务器端脚本语言,它主要用于Web开发。以下是PHP的一些特点: PHP是一种解释性语言,不需要编译,可以直接在服务器上运行。 PHP支持多种数据库,包括MySQL、Oracle、Po…

    C# 2023年5月15日
    00
  • c#在控制台输出彩色文字的方法

    下面我将详细讲解如何在C#控制台输出彩色文字。 1. 使用系统默认颜色 在C#控制台中,可以使用控制台对象Console的静态方法来输出彩色文字。首先让我们来看一下使用系统默认颜色的方法。 使用Console.ForegroundColor属性设置前景色,即文字颜色,使用Console.BackgroundColor属性设置背景色,然后使用Console.W…

    C# 2023年6月7日
    00
  • c#基于winform制作音乐播放器

    C#基于Winform制作音乐播放器攻略 准备工作 确认已安装好 .NET Framework,本攻略基于.NET Framework 4.8进行讲解 了解Windows多媒体API Windows Media Player Control,本攻略使用此控件实现音乐播放器 步骤 1. 创建Winform应用程序 在Visual Studio中,打开File-…

    C# 2023年6月6日
    00
  • C#中委托和事件的区别详解

    C#中委托和事件的区别详解 什么是委托和事件 委托 委托(delegate)是一种类型,它可以代表多个方法,并且只有这些方法的签名一致才能被委托代表。委托可以看做是方法的引用,提供了一种将方法作为参数传递给其他方法的方式。 在C#中声明一个委托类型,需要使用delegate关键字。 事件 事件(event)是委托的一种应用,它允许对象在某个事件发生时,通知其…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部