请问,ViewData和ViewBag是否也属于ASP.NET MVC状态管理的一部分?
谢谢。
ViewBag
和 ViewData
并不存储状态,但它们可以传递状态到视图中进行呈现和存储。
ViewBag
和 ViewData
是什么?ViewBag
和 ViewData
不是状态持久化机制,但我认为它们是状态管理的一部分:它们是将数据传递给页面的机制,然后可以在生成的 html 中作为状态进行持久化。这样,它们是状态生命周期的一部分,因为它们允许您使用像 @Html.HiddenFor
或 @Html.ActionLink
这样的帮助程序将状态存储在客户端 html 中。
在我的回答中 "storing a js value from 1 ActionResult to use in another ActionResult" 中,我谈到了如何使用 ViewBag
和 ViewData
在客户端 html 中存储状态以及状态存储的各种选项。
ViewBag
是什么,它实际上是一种动态访问ViewData
的方式,因此ViewBag.MyItem = "foo";
和var valueEqualsFoo = ViewData["MyItem"];
将设置并返回相同的字符串,可以互换使用。
ViewBag
、ViewData
与视图模型(View Model)最为相关。在操作(Action)中,将模型传递给视图(View)使用return View(viewModel);
:这三种技术都将状态从内存传递到HTML中,在发送到客户端、任何中间缓存以及远离服务器的位置进行“持久化”。ViewBag
或 ViewData
。对于 一个快速且简单的解决方案,它们可能还不错,但那些东西往往会产生技术债务。 ViewBag
可能适用于设置页面标题。
强类型视图模型:
我曾经在这里说过,现在我再次强调:以前至少有ASP.NET中用于管理持久用户状态的9种选项,其中许多仍适用于MVC。根据状态应如何使用,它们都具有不同的用途。通常情况下,尽可能无状态的服务器端代码更容易进行测试和调试。
客户端存储包括:/Product/1
)ViewState
Session
属性可用)Cache
属性可用)HttpContext
属性作为HttpContext.Application
可用)WebConfigurationManager.AppSettings
字典。注脚:
† 我们现在拥有易于使用的响应式设计工具,我们可以在适当的时候使用,但并不总是合适:一些视图需要在移动设备上完全不同,但仍然使用相同的视图模型作为大屏幕站点。
两者都不是!
状态管理有两种类型:1:客户端,2:服务器端
客户端
服务器端
如果您想了解这些的区别,请看这里 ViewData和ViewBag有什么区别?