【MVC】TempData、ViewBag、ViewData、Model

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LYN_xj94512/article/details/87536836

前言

MVC是什么呢?
它是一个框架,全称:是模型(model)-视图(view)-控制器(controller)

  • Model(模型):表示应用程序核心
  • View(视图):用来显示数据,即用户看到并与指交互的界面
  • 控制器(controller):处理用户交互、使用模型并最终选择要呈现的视图来显示 UI 的组件
    在这里插入图片描述
    现在对MVC有了初步的了解,下面了解一下TempData、ViewBag、ViewData、Model之间的区别吧!!
Model

对于学习MVC的人来说,Model是不陌生的,它是MVC中的M,也是重要的存在着,它可以用来传递数据,让V与C之间解耦,使用Model进行数据传输。一般会在Controller中通过return view(model)赋属性来访问这个对象。

PS:如果在View中cshtml文件中通过“@model 类型”指定类型,则cshtml中的Model就是指定的强类型的,这样的cshtml叫“强类型视图”;如果没有,则cshtml中的Model就是dynamic。

例如:(将下面的代码写在cshtml中最前面,这样的cshtml叫“强类型视图”)

@model WebApplication1.Models.person
ViewData

ViewData是字典类型,赋值方式用字典方式,通过key值读取对应的value,ViewData[“hello”]

ViewBag

ViewBag是动态类型,使用时直接通过属性赋值即可,ViewBag.hello

TempData

在SendRedirect客户端重定向或者验证码等场景下,需要跨请求的存储数据,这个时候是不能用上面的三个的需要将数据暂时存在“Session”中,用完之后进行删除,尽管这样也不是很繁琐,但是还有一种方式可以更加简单的实现这些,那就是在一个Action中存入TempData,在后续的action一旦被读取一次,数据就会自动销毁。
TempData可以通过转向继续使用,因为它的值保存在Session中。但TempData只能经过一次传递,之后会被系统自动清除

PS:

  • 除了Model之外,另外三个在源码中也可以很清晰的看到他们之间的区别:
    在这里插入图片描述
  • TempData和ViewData中,ViewData如果key在controller层和在view层中key值不同则会报错,但是TempData则会顺利执行

例子:
Controller层

public ActionResult Index()
        {

            ViewBag.hello = "hello,this is viewBag";
            ViewData["hi"] = "hi,this is viewData";
            TempData["key"] = "this is tempdata";
            person p = new person();
            p.Name="张三";
            return View(p);
        }

Model层person.cs

public class person
    {
        public string Name { get; set; }
    }

View层中Index.cshtml

@model WebApplication1.Models.person
@{
    Layout = null;
}

<h2>Index</h2>
<p>
    @ViewBag.hello
    <br />
    @ViewData["hi"]
    <br />
   @TempData["key"]
</p>

<input type="text" value="@Model.Name" />

实现结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/LYN_xj94512/article/details/87536836