TempData、ViewData、ViewBag三种方式,这三种什么差别呢?
TempData:默认存储于Session中,可通过继承ITempDataProvider接口改变。
生命周期:经过一次Controller传递就失效,即View读取一次后相应的TempData即从TempData集合中删除,只是假设TempData未被View读取之前,其值可在Controller之间传递。(假设你不想TempData使用后就删除,您能够通过TempData.Peek(“KEY”)来长期保存。假设是仅仅想再保存一次,再读取一次后再删除则要使用TempData.Keep(“KEY”),这样假设再被读取又会再次标记删除。)
ViewData:默认存储为Dictionary键值对
生命周期:仅对当前View有效。
ViewBag:不再是以键值对形式存放。它以dynamic类型存放
生命周期:同ViewData一样,仅对当前View有效(ViewBag可看成是对ViewData的封装,只是ViewBag不能够作为扩展方法的參数,因为扩展方法的參数类型必须是明确的)
除了以上三种方式以外,还有ViewModel、PartialView和Tuple
ViewModel:它是基于视图需求的Model,它能够把多个View Model以属性的方式合并到一个View Model中。
长处:
● 把多个model放到一个View Model中
● 有智能提示
● 安全性:Domain Model被隐藏
● 当Domain Model有变化,不须要改动视图非常多。仅仅须要改动相应的View Model就能够
● 在Domain Model和View之间实现了松耦合
PartialView:对于哪些须要反复使用的视图部分,提取出来作为部分视图。
长处:
● 方便反复使用
● 仅仅更新主视图的某个部分
缺点:
● 多过的使用影响可读性
Tuple:.NET 4.0推出的。是一个有序的、不可变的、固定大小的、同意存放多种类型的类。
适合传递一些”小数据”。假设不想在ASP.NET MVC中创建View Model,可用Tuple来替代。
长处:
● 提供了一种不须要创建View Model而传递Model的方式。
缺点:
● 大小被限制:最多仅仅能存放8组数据。
前5种方式的页面获取值
对于方式四,需要在Startup类中注入Session,在ConfigureServices方法中添加 services.AddSession(),在Configure方法中添加 app.UseSession(),不然会报以下错误(System.InvalidOperationException:“Session has not been configured for this application or request.”)
添加完后的截图如下所示:
同时在Index.cshtml中引入:@using Microsoft.AspNetCore.Http
对于方式五需要在Index.cshtml中引入:@model System.String
结果如下所示:
对于方式六,需要在地址中调用
就会进入Index1方法中,此时 value=999