MVC(二)

通过前一篇文章,我们对MVC有了一定的了解。

三、MVC能做什么

网站——服务器返回页面——实际上就是一段文本(response header+html)。

实际上mvc的action可以返回一切东西:页面 字符串 json xml file 图片。。。

与webapi的区别:其实也一样,因为二者都是一个http协议,就是响应请求,返回数据

专人做专事儿,webapi自宿主,管道模型不一样,而且对httpmethod支持不一样

四、MVC传值

ViewData和ViewBag其实是一回事, ViewBag其实是对ViewData的封装, 其内部其实是使用ViewData实现数据存储的。唯一的不同点是,ViewBag可以存储动态类型(dynamic)的变量值, 而ViewData只能存储String Key/Object Value字典数组

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

  • ViewBag也只在当前的请求中有效。

  • 在重定向(redirection)后,ViewBag中存储的变量值将变为null
  • 因为ViewBag是动态类型,所以我们在取得其值时,不需要进行类型转换。

TempData也是一个String Key/Object Value字典数组。 和ViewData与ViewBag不同的是其所存储的数据对象的生命周期。 如果页面发生了跳转(Redirection),ViewBag和ViewData中的值将不复存在, 但是TempData中的值依然还在。 换句话讲, ViewBag和ViewData存储的值的生命周期只有在从Controller到View中, 而TempData中的数据不仅在从Controller到View中有效,在不同的Action之间或者从一个页面跳转到另一页面(Controller to Controller)后依然有效。

  • TempData是一个继承自TempDataDictionary类的字典对象,它默认情况下是基于Session存储机制之上的。(备注: 你也可以让你的TempData基于其他存储机制之上, 我们可以提供我们自定义的ITempDataProvider来完成,具体可以参见:Session-less Controllers and TempData in ASP.NET MVC)
  • TempData是用来在多个Actions或从当前请求向子请求, 页面发生了重定向(Redirection)时传递共享数据。
  • 只有在目标视图(View)完全加载后才有效。
  • 在取出TempData存储的变量值时,必须进行合适的类型转换(隐式或显式)和空值检查。
  • TempData主要用在需要在多个Actions或者页面重定向时共享传递数据时使用

Session其实和ViewData类似,也是一个String Key/Object Value字典数组。但是,Session是存储在客户端的Cookies中,所以它的生命周期是最长的。 但是,正因为其存储的客户端, 所以必须确保没有敏感机密的信息存储其中

  • Session也是ASP.NET MVC程序传递值的一种方式,但与TempData不同,用户的整个会话中Session都不会过期。
  • Session在同一用户会话过程中的所有请求中有效,比如,刷新页面。
  • Session中的值也需要进行类型转换(隐式或显式)和非空检查。
  • Session的生命周期是最长的,但是它默认使用的是Cookies来存储数据,所以使用的时候必须注意数据保密的问题。 综上, Session主要用在需要在多个Controllers, Actions and Views共享数据(非敏感数据)时使用。

本文参考文档:https://www.cnblogs.com/EasonWu/p/beginner-aspnet-mvc-various-ways-of-passing-data-in-mvcapps.html;

https://www.cnblogs.com/wintersun/archive/2012/01/21/2328563.html;

https://blog.csdn.net/shuaishenkkk/article/details/8570463;

https://www.codeproject.com/Articles/576514/AplusBeginner-splusTutorialplusonplusVariousplus;

微软文档地址:

Controllerbase: https://docs.microsoft.com/en-us/dotnet/api/system.web.mvc.controllerbase.viewdata?view=aspnet-mvc-5.2;

Razor 语法:https://docs.microsoft.com/zh-cn/aspnet/web-pages/overview/getting-started/introducing-razor-syntax-c;

MVC5:https://docs.microsoft.com/zh-cn/aspnet/mvc/overview/getting-started/introduction/;

MVC5视频地址:https://app.pluralsight.com/player?author=scott-allen&name=aspdotnet-mvc5-fundamentals-m1-introduction&mode=live&clip=0&course=aspdotnet-mvc5-fundamentals;

Original: https://www.cnblogs.com/Dewumu/p/10508082.html
Author: 德乌姆列特
Title: MVC(二)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/606858/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Redis基础

    1.简介 Redis (远程字典服务器)是一 个开源的、使用C语言编写的NoSQL数据库。Redis基于内存运行并支持持久化,采用 key-value (键值对)的存储形式,是目前…

    Linux 2023年6月13日
    058
  • Windows gitweb安装

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月30日
    0264
  • 图解固件、驱动、软件的区别

    大家好,我是良许。 不管我们使用什么操作系统,无论是 Windows、macOS 还是 Linux ,里面都安装了许多软件、驱动程序和固件。但是,这三者概念有区别呢? 我在朋友圈做…

    Linux 2023年5月27日
    068
  • Docker镜像构建之Dockerfile

    在 Docker 中构建镜像最常用的方式就是使用 Dockerfile。Dockerfile 是一个用来构建镜像的文本文件。 官方文档:https://docs.docker.co…

    Linux 2023年5月27日
    097
  • 《kasini3000》批量修改linux被控机密码

    《卡死你3000》,是开源,免费,跨平台的devops批量脚本框架。 网址:码云家 https://gitee.com/chuanjiao10/kasini3000 批量生成密码之…

    Linux 2023年6月13日
    061
  • PyQt5的使用

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年11月8日
    0212
  • bash怎么调用sql并保存结果

    mysql -uroot -pP@ssw0rd123.abc -h127.0.0.1 -P3306 -e \‘select c.TABLE_SCHEMA ,c.TABL…

    Linux 2023年6月7日
    0130
  • 【Jmeter】jmeter提取response中的返回值,并保存到本地文件–BeanShell后置处理器

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年9月14日
    0223
  • 如何使用CMake构建c++项目

    1. c++项目构建与CMake简介 在Windows系统上我们通常使用 Visual Studio(VS)来生成我们的c++项目。我们只需在VS相应的层次目录中添加相应的文件即可…

    Linux 2023年5月27日
    0173
  • [转]linux awk命令详解

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月26日
    0241
  • git add 忽略某个文件

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月30日
    0233
  • Linux中CentOS 7版本安装JDK、Tomcat、MySQL、lezsz、maven软件详解

    软件安装 在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下: 安装方式 特点 二进制发布包安装 软件已经针对具体平台编译打包发布,只要解压,修改配置即可 rp…

    Linux 2023年6月6日
    072
  • 多用户共享文件

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年11月5日
    0311
  • 016 Linux 卧槽,看懂进程信息也不难嘛?top、ps

    1 扒开看看 top 命令参数详情 第一行,[top – ]任务队列信息 第二行,[Tasks] 任务(进程) 第三行,[Cpu(s)]状态信息 第四行,[Mem]内存…

    Linux 2023年5月27日
    088
  • Linux命令——groups

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月24日
    0248
  • Where windows subsystem for linux (WSL) File/Directory Location?

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月11日
    0293
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球