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

news2024/10/7 16:20:49

随着技术的发展,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赋值,如下所示:

/// <summary>
/// ViewData
/// </summary>
/// <returns></returns>
public IActionResult Test()
{
    ViewData.Add("Name", "公子小六");
    ViewData.Add("Age", 20);
    return View();
}

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

<h1>欢迎公子小六</h1>
<div>
    <span>姓名:</span>
    <span>@ViewData["Name"]</span>
</div>
<div>
    <span>年龄:</span>
    <span>@ViewData["Age"]</span>
</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进行赋值,如下所示:

public IActionResult Test2()
{
    ViewBag.Name = "公子小六";
    ViewBag.Age = 23;
    return View();
}

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

@{
    var name = ViewBag.Name;
    var age = ViewBag.Age;
    name = name + "A";
    age = age + 1;
}
<h1>欢迎公子小六</h1>
<div>
    <span>姓名:</span>
    <span>@ViewBag.Name</span>
</div>
<div>
    <span>年龄:</span>
    <span>@ViewBag.Age</span>
</div>
<div>
    <span>姓名:</span>
    <span>@name</span>
</div>
<div>
    <span>年龄:</span>
    <span>@age</span>
</div>

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

模型数据

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

创建模型

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

public class Student
{
    /// <summary>
    /// 唯一标识
    /// </summary>
    public int Id { get; set; }

    /// <summary>
    /// 学生名称
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    /// 学生年龄
    /// </summary>
    public int Age { get; set; }

    /// <summary>
    /// 学生性别
    /// </summary>
    public string Sex { get; set; }
}

控制器实例化模型

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

public IActionResult Index()
{
    var student = new Student()
    {
        Id = 1,
        Name = "公子小六",
        Age = 21,
        Sex = "男"
    };

    return View(student);
}

视图指定模型

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

@model  DemoCoreMVC.Models.Student
<h1>欢迎公子小六</h1>
<div>
    <span>学号:</span>
    <span>@Model.Id</span>
</div>
<div>
    <span>姓名:</span>
    <span>@Model.Name</span>
</div>
<div>
    <span>年龄:</span>
    <span>@Model.Age</span>
</div>
<div>
    <span>性别:</span>
    <span>@Model.Sex</span>
</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的页面中分别获取两个值。

public IActionResult Test3()
{
    ViewData.Add("Name", "公子小六1");
    TempData.Add("Name", "公子小六2");
    return View();
}

public IActionResult Test4()
{

    return View();
}

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

Test3.cshtml页面内容如下:

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

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

<h1>欢迎公子小六</h1>

<div>
    <span>姓名ViewData:</span>
    <span>@ViewData["Name"]</span>
</div>
<div>
    <span>姓名TempData:</span>
    <span>@TempData["Name"]</span>
</div>

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

由以上示例可以看出:

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417870.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4.13实验 加测试题目

今天是个好日子,要搞栈的实验 没啥就是链栈和顺序栈 和出栈入栈,强大都是从最基本开始的 来和我一起写写吧 //顺序栈 typedef struct node{int *base;int *top;int sizer; }shed;//链栈 typedef struct Node{ int data; struct Node* next; }*stact,link; //顺序栈的初始化…

《绝对坦率》速读笔记

文章目录书籍信息概览&#xff08;第一部分 一种新的管理哲学&#xff09;建立坦率的关系给予并鼓励指导了解团队中每个人的动机协同创造成果&#xff08;第二部分 工具和技巧&#xff09;关系指导团队结果书籍信息 书名&#xff1a;《绝对坦率&#xff1a;一种新的管理哲学》…

北邮22信通:(12)二叉树的遍历书上代码完整版

北邮22信通一枚~ 跟随课程进度每周更新数据结构与算法的代码和文章 持续关注作者 解锁更多邮苑信通专属代码~ 上一篇文章&#xff1a; 下一篇文章&#xff1a; 目录 一.储存最简单数据类型的二叉树 代码部分&#xff1a; 代码效果&#xff1a; 运行结果&#xff1a…

解决JD-GUI-1.6.6 中文乱码

一、背景 在window环境下使用中遇到了乱码问题。 问题有两个&#xff1a; 一、从反编译代码的界面 CTRLC 复制是如果选中内容包含中文&#xff0c;贴到其他编辑器时&#xff0c;中文丢失。 二、打开xml文件、properties文件等包含中文时。中文在反编译界面中显示乱码。用其他工…

java反射教程

反射&#xff08;Reflection&#xff09;是 Java中的一种机制&#xff0c;它是一种特殊的面向对象编程技术。在 Java中&#xff0c;反射可以分为静态反射和动态反射两种。静态反射是指在 Java程序运行时才进行的一种反射&#xff0c;它可以保证程序运行时不会出现内存泄漏等错误…

数据分析的作用和意义?

数据分析的作用和意义&#xff1f;在当下数字化转型发展的大环境中&#xff0c;数据也成为企业商业成功与否的重要基础&#xff0c;如何利用好数据分析问题预测未来也成为更多企业面临的首要问题。而随时大数据的不断渗透&#xff0c;数据量和数据类型也越来越多&#xff0c;数…

asp.net车辆管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net车辆管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言开发 asp.net车辆管理系统VS开发sqlserver数…

【CSIG图像图形技术挑战赛-开放世界目标检测竞赛】火热报名中!

竞赛名称&#xff1a;开放世界目标检测竞赛/Few Shot&#xff09;主办方: 中国图象图形学学会&#xff08;CSIG&#xff09;合作方: 360集团竞赛目的与意义&#xff1a;目标检测是计算机视觉中的核心任务之一&#xff0c;主要目的是让计算机可以自动识别图片中目标的类别&#…

Windows File Recovery使用教程

Windows File Recovery简介 Windows File Recovery是微软在2020年发布的命令提示符文件恢复工具&#xff0c;它不仅具有高成功率和高安全性&#xff0c;还适用于不同的文件系统和文件丢失场景。如果你需要从本地硬盘、USB设备、SD卡等设备中恢复意外丢失或删除的JPEG、PDF、…

分析Spring事务管理原理及应用

目录 一、Spring事务管理介绍 &#xff08;一&#xff09;基本理论 &#xff08;二&#xff09;实际工作中的举例 &#xff08;三&#xff09;简单应用举例 二、Spring事务配置介绍 &#xff08;一&#xff09;Spring事务属性介绍 传播属性&#xff08;传播行为&#xff…

车身控制模块BCM(Body Control Module)

1.BCM概述 车身控制模块BCM是高集成度的芯片。BCM的英文全称是Body Control Module。其控制对象是采用高灵敏度带唤醒及睡眠检测的高频收发器&#xff0c;实现车门车窗遥控上锁与开锁、电动后视镜、中控门锁、玻璃升降装置、车灯(远光灯、近光灯、位置灯、制动灯、转向灯、雾灯…

【RocketMQ】主从模式下的消费进度管理

在【RocketMQ】消息的拉取一文中可知&#xff0c;消费者在启动的时候&#xff0c;会创建消息拉取API对象PullAPIWrapper&#xff0c;调用pullKernelImpl方法向Broker发送拉取消息的请求&#xff0c;那么在主从模式下消费者是如何选择向哪个Broker发送拉取请求的&#xff1f; 进…

【Linux】项目自动化构建工具-make/Makefile

文章目录1.make/Makefile的重要性2.规则及使用使用规则3.Makefile编译多文件1.make/Makefile的重要性 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xf…

2023美赛春季赛Z题模型代码

已经完成模型代码&#xff0c;仅供大家参考&#xff0c;需要更多请看文末 一、问题分析 首先需要收集与奥运会举办城市/国家相关的历史数据。这需要涉及诸如经济、土地利用、人类满意度&#xff08;包括运动员和观众&#xff09;、旅行、基础设施建设、环境影响等多个方面。数…

(二)【软件设计师】计算机系统—CPU运算器控制器

文章目录一、CPU1.计算机硬件基本组成&#xff08;了解&#xff09;2.中央处理单元&#xff08;了解&#xff09;3.CPU组成4.例题二、运算器1.运算器有两个主要功能2.简要介绍运算器中各组成部件的功能三、控制器1.例题2.组成部分四、总结一、CPU 1.计算机硬件基本组成&#x…

让chatGPT当我的老师如何? 通过和chatGPT交互式学习,了解在ES中,一条JSON数据是如何写到磁盘上的

最近一直有一个问题&#xff0c;如鲠在喉。争取早一天解决&#xff0c;早一天踏踏实实的睡觉。 问题是&#xff1a;在ES中&#xff0c;一条JSON数据是如何写入到磁盘上的&#xff1f; 如何解决这个问题&#xff1f;我想到了chatGPT&#xff0c;还有lucene的学习资料。这篇文章&…

港科夜闻|香港科大(广州)创邻图数据联合实验室正式成立

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、香港科大(广州)创邻图数据联合实验室正式成立。未来&#xff0c;香港科大(广州)与「创邻科技」双方将围绕万亿级大图神经网络计算框架、海量数据的时序图处理、分布式原生图数据库事务及性能优化等前沿图技术领域研究展开深…

Cocos Creator的Hello World

0、文档 Cocos官网文档 1、下载 访问cocos官网下载Cocos Dashboard 安装时选项安装 Visual Studio 2017可以不勾选 注意&#xff1a;Cocos Dashboard的快捷方式文件名为CocosDashboard.exe&#xff0c;不要误认为是安装文件 2、注册、登录 注册/登录cocos网址 3、Cocos D…

深度学习之CD数据集创建

深度学习之数据集创建1. 原始文件相关文件路径2. 数据集创建2.1 数据格式一2.2 数据格式二1. 原始文件相关文件路径 原始路径 对于label图片文件&#xff0c;通道需要为单通道&#xff0c;如果不是单通道&#xff0c;训练数据会报错 报错信息例如&#xff1a;ValueError: Mask…

自然语言处理(八):Lexical Semantics

目录 1. Sentiment Analysis 2. Lexical Database 2.1 What is Lexical Database 2.2 Definitions 2.3 Meaning Through Dictionary 2.4 WordNet 2.5 Synsets 2.6 Hypernymy Chain 3. Word Similarity 3.1 Word Similarity with Paths 3.2 超越路径长度 3.3 Abstra…