我是靠谱客的博主 现实外套,最近开发中收集的这篇文章主要介绍MVC传递Model之TempData、ViewData、ViewBag区别及用途,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MVC使用过程中经常会用到TempData、ViewData、ViewBag三种方式,这三种什么区别呢?
TempData:默认存储于Session中,可通过继承ITempDataProvider接口改变,
生命周期:经过一次Controller传递就失效,即View读取一次后对应的TempData即从TempData集合中删除,不过如果TempData未被View读取之前,其值可在Controller之间传递。PS:如果你不想TempData使用后就删除,您可以通过TempData.Peek(“KEY”)来长期保存,如果是只想再保存一次,再读取一次后再删除则要使用TempData.Keep(“KEY”),这样如果再被读取又会再次标记删除。

ViewData:默认存储为Dictionary键值对
生命周期:仅对当前View有效。

ViewBag:不再是以键值对形式存放,它以dynamic类型存放
生命周期:同ViewData一样,仅对当前View有效
PS: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组数据。
● 值以item1, item2…来传递,很难确定item1, item2…到底代表哪组数据。
● 智能提示不理想
例子:

□ HomeController

        public ActionResult TupleDemo()
        {
            var allModels = new Tuple<List<Course>, List<Teacher>, List<Student>>(_repository.GetCourses(),
                _repository.GetTeachers(), _repository.GetStudents()) {};
            return View(allModels);
        }

□ Home/TupleDemo.cshtml

@model Tuple <List <MvcApplication1.Models.Course>, List <MvcApplication1.Models.Teacher>, List <MvcApplication1.Models.Student>>    

下拉框遍历课程:

@foreach (var course in Model.Item1)

ajax请求老师课程表和学生上课表:

@Html.Raw(Json.Encode(Model.Item2)) 
@Html.Raw(Json.Encode(Model.Item3))

● 如果传递的是”小数据”,我们想到ViewBag, ViewData
● 当需要跨controller,跨action传递,我们想到TempData
● 如果基于View的Model,我们想到针对该View设计View Model
● 如果视图的某个部分需要被重复使用,就把之提炼出来,成为一个Partial View
● 如果传递的是”小数据”,又不想使用View Model,可以考虑Tuple

最后

以上就是现实外套为你收集整理的MVC传递Model之TempData、ViewData、ViewBag区别及用途的全部内容,希望文章能够帮你解决MVC传递Model之TempData、ViewData、ViewBag区别及用途所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部