Jit*_*mar 5 asp.net-mvc state-management asp.net-mvc-3
有人可以告诉我,ViewData和ViewBag是否也是asp.net mvc状态管理的一部分?谢谢
And*_*own 11
ViewBag
并且ViewData
不存储状态,但是它们可以将它传递给要呈现和存储的视图.
ViewBag
和ViewData
?ViewBag
并且ViewData
不是状态持久性机制,但我相信它们是状态管理的一部分:它们是将数据传递到页面的机制,然后可以在生成的html中将其作为状态持久化.通过这种方式,它们是状态生命周期的一部分,因为它们允许您使用诸如@Html.HiddenFor
或之类的帮助程序在客户端html中存储状态@Html.ActionLink
.
在我的回答"存储来自1个ActionResult的js值以在另一个ActionResult中使用"中,我讨论了如何ViewBag
以及ViewData
可以用于在客户端html中存储状态,以及状态存储的各种选项是什么.
至于什么ViewBag
是,它实际上是一个dynamic
访问的方式ViewData
,所以ViewBag.MyItem = "foo";
和var valueEqualsFoo = ViewData["MyItem"];
将设置并返回相同的字符串,可以互换.
ViewBag
,ViewData
与Action中的View Model最紧密相连,其中模型使用以下内容传递给Action内部的View return View(viewModel);
:所有三种技术都将内存中的状态传递给html,将其发送到客户端,发送到任何中间缓存,并且"坚持"远离您的服务器.
以类似的方式,当URL中的查询字符串被发送到http请求中的服务器时,它是传递状态的方法,实际的状态存储是<a href="urlwithquerystring">...</a>
html中的锚.Rest ajax请求的Restful URL和主体在其定义和行为方面是相同的.ViewBag/Data
将状态从Action传递给html,传递给客户端并存储,查询字符串或restful url然后将状态传递回服务器以用于下一个Action调用.
您的Razor代码中的拼写错误很难检查动态属性; 很容易检查强类型视图模型上是否存在属性.所以我相信你应该很少使用它们.在我看来,最好是创建强类型视图模型而不是使用ViewBag
或ViewData
.它们可能适用于快速而肮脏的解决方案,但这些事情往往会产生技术债务.ViewBag
是有可能用于设置页面标题确定.
强类型视图模型:
我在这里说了,我再说一遍:在ASP.NET中至少有九个用于管理持久用户状态的选项,其中许多仍然适用于MVC.根据应该如何使用状态,它们都有不同的用途.通常,尽可能无状态的服务器端代码更易于测试和调试.
Session
财产获得Cache
属性提供)HttpContext
财产获得HttpContext.Application
)WebConfigurationManager.AppSettings
字典.脚注:
† 我们现在拥有易于使用的响应式设计工具,我们可以在 适当的时候使用它,但并不总是合适:某些视图在移动设备上需要看起来完全不同,但仍然使用与大屏幕网站相同的视图模型.
归档时间: |
|
查看次数: |
10298 次 |
最近记录: |