草庐IT

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

老码识途 2023-06-16 原文

随着技术的发展,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项目中,控制器传递数据到视图,常见的有以下几种方式:

  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】,如下所示:

 

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项目中,模型的主要作用就是在控制器和视图之间进行数据交互,用来传递数据也非常简单,如下所示:

 

创建模型

 

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

 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/】页面如下所示:

 

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】,如下所示:

由以上示例可以看出:

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

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

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

有关ASP.NET Core MVC 从入门到精通之接化发(二)的更多相关文章

  1. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  2. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  3. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

  4. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  5. ruby - 在 ASP 页面上 Mechanize 中断 - 2

    require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie

  6. 区块链入门教程(6)--WeBASE-Front节点前置服务安装 - 2

    文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定

  7. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  8. Simulink方法总结和避坑指南(一)——Simulink入门与基本调试方法 - 2

    文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景  最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。  在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记

  9. ESP32学习入门:WiFi连接网络 - 2

    目录一、ESP32简单介绍二、ESP32Wi-Fi模块介绍三、ESP32Wi-Fi编程模型四、ESP32Wi-Fi事件处理流程 五、ESP32Wi-Fi开发环境六、ESP32Wi-Fi具体代码七、ESP32Wi-Fi代码解读6.1主程序app_main7.2自定义代码wifi_init_sta()八、ESP32Wi-Fi连接验证8.1测试方法8.2服务器模拟工具sscom58.3测试代码8.4测试结果前言为了开发一款亚马逊物联网产品,开始入手ESP32模块。为了能够记录自己的学习过程,特记录如下操作过程。一、ESP32简单介绍ESP32是一套Wi-Fi(2.4GHz)和蓝牙(4.2)双模解决方

  10. ruby-on-rails - Rails 还是 Sinatra? PHP程序员入门学习哪个好? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我使用PHP的时间太长了,对它感到厌倦了。我也想学习一门新语言。我一直在使用Ruby并且喜欢它。我必须在Rails和Sinatra之间做出选择,那么您会推荐哪一个?Sinatra真的不能用来构建复杂的应用程序,它只能用于简单的应用程序吗?

随机推荐