Webforms中的ViewState和MVC中的ViewBag之间是否存在功能差异?它们似乎是“同一件事”。并且可以以相同的方式使用。我问,因为MVC推广无状态Web而不是填充页面中的数据导致膨胀和性能降低。但似乎你也可以在MVC中做到这一点。他们所做的一切,似乎只是给它一个新名字。
答案 0 :(得分:7)
ViewState 将表单数据序列化为表单中隐藏的加密字段,因此可以在回发上重新绑定数据。
ViewBag / ViewData 是一个可以“填充”数据的字典。例如,您可以在Controller中添加它,然后在View中访问它。数据为dynamic
,这使得处理数据变得困难。 ViewBag不会被发送到客户端,它是MVC(服务器管道)的一部分。
两者都应该避免。
ViewState,好吧,不使用它并找到解决方法。使用ViewModels应该避免使用ViewBag。
答案 1 :(得分:6)
将Viewstate与表单内容一起发回服务器,因此可以在回发时获得其中的值。只有在提供页面之后,Viewbag才会保留其中的值,然后从内存中删除ViewBag。因此,您可以使用ViewState在调用之间保持状态,但不能对ViewBag执行相同的操作。
答案 2 :(得分:3)
ViewBag不会被发送到客户端(浏览器)。它纯粹是使用从控制器转换到View(在它发送回客户端之前)的东西。
在MVC中,如果你从该页面获得回发,那么你就不会像Viewstate一样恢复你的“状态”,你所拥有的唯一状态就是你发送给浏览器的任何东西,以及你发回的任何内容。