【发布时间】:2012-03-28 12:06:20
【问题描述】:
Webforms 中的 ViewState 和 MVC 中的 ViewBag 在功能上有区别吗?它们似乎是“同一件事”。并且可以以相同的方式使用。我问是因为 MVC 促进了无状态 Web,而不是在页面中填充数据导致膨胀和性能下降。但似乎你也可以在 MVC 中做到这一点。他们所做的似乎只是给它一个新名字。
【问题讨论】:
标签: asp.net-mvc webforms viewstate viewbag
Webforms 中的 ViewState 和 MVC 中的 ViewBag 在功能上有区别吗?它们似乎是“同一件事”。并且可以以相同的方式使用。我问是因为 MVC 促进了无状态 Web,而不是在页面中填充数据导致膨胀和性能下降。但似乎你也可以在 MVC 中做到这一点。他们所做的似乎只是给它一个新名字。
【问题讨论】:
标签: asp.net-mvc webforms viewstate viewbag
ViewState 将表单数据序列化为表单中隐藏的加密字段,因此可以在回发时重新绑定数据。
ViewBag/ViewData 是一个字典,您可以在其中“填充”数据。例如,您可以在 Controller 中添加它,然后在 View 中访问它。数据是dynamic,这使得处理数据变得困难。 ViewBag 不会被发送到客户端,它是 MVC(服务器管道)的一部分。
两者都应该避免。
ViewState,好吧,不使用它并寻找解决方法。并且应该通过使用 ViewModel 来避免 ViewBag。
【讨论】:
SelectList 的属性,它可以绑定到你的视图中。那里绝对不需要 ViewBag。
Viewstate 与表单的内容一起回发到服务器,因此其中的值在回发时可用。 viewbag 只保存其中的值,直到页面被提供,然后 ViewBag 从内存中删除。所以你可以使用 ViewState 来保持调用之间的状态,但你不能对 ViewBag 做同样的事情。
【讨论】:
ViewBag 不会发送到客户端(浏览器)。它纯粹是用来从控制器转换到视图(在它发送回客户端之前)。
在 MVC 中,如果您从该页面获得回发,那么您将无法恢复您的“状态”,就像 Viewstate 所做的那样,您拥有的唯一状态是您发送到浏览器的任何内容,以及您发回的任何内容。
【讨论】: