• MVC(二)


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

    三、MVC能做什么

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

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

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

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

    四、MVC传值

    在ASP.NET MVC中,页面间和Controller与View之间主要有以下几种小量数据传值方式, ViewDataViewBagTempDataSession变量

    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;

    本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。

    博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。

    博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个无耻的文档搬运工!

  • 相关阅读:
    套路
    委托、事件 茴字有几种写法
    数学 矩阵
    webForm系列 前端框架快速引用
    图片引用
    【HTML】Advanced6:HTML5 Forms Pt. 1: Input Types
    【HTML】Advanced5:Accessible Forms
    【HTML】Advanced4:Accessible Links
    【HTML】Advanced3:Tables: Columns, Headers, and Footers
    【HTML】Advanced2:Conditional Comments
  • 原文地址:https://www.cnblogs.com/Dewumu/p/10508082.html
Copyright © 2020-2023  润新知