【MVC】TempData、ViewBag、ViewData、Model
前言
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" />
实现结果:
上一篇: 14、HTML <input>标签
下一篇: MyBatis查询返回Map示例代码
推荐阅读
-
【MVC】TempData、ViewBag、ViewData、Model
-
MVC ViewBag和ViewData的使用
-
ViewData、ViewBag、TempData、Session的区别与联系
-
.NET MVC中ViewData,ViewBag和TempData的区别浅析
-
.NET MVC中ViewData,ViewBag和TempData的区别浅析
-
MVC页面常见三种传值方式??ViewData,ViewBag,TempData_html/css_WEB-ITnose
-
MVC5控制器传值的三种方式(ViewData,ViewBag,TempData),刚刚学习MVC5的新手,希望各位大神多多指教
-
Asp.net MVC中的ViewData与ViewBag
-
ASP.NET MVC传递Model到视图的多种方式总结(二)__关于ViewBag、ViewData和TempData的实现机制与区别
-
MVC ViewData与ViewBag的区别