Разница между viewbag и viewstate? - PullRequest
14 голосов
/ 12 марта 2012

Есть ли функциональная разница между ViewState в Webforms и ViewBag в MVC? Кажется, они "одно и то же". И могут быть использованы такими же способами. Я спрашиваю, потому что MVC продвигает Интернет без сохранения состояния и не помещает данные на страницу, что приводит к раздутию и снижению производительности. Но, похоже, вы можете сделать это и в MVC. Все, что они сделали, похоже, просто дали ему новое имя.

Ответы [ 3 ]

7 голосов
/ 12 марта 2012

ViewState в веб-формах сериализовал данные формы в скрытое, зашифрованное поле в форме, поэтому данные могли быть повторно связаны при обратной передаче.

ViewBag / ViewData - это словарь, в который можно «вставлять» данные. Например, вы можете добавить его в свой контроллер, а затем получить к нему доступ в своем представлении. Данные dynamic, что затрудняет работу с данными. ViewBag не отправляется клиенту, он является частью MVC (конвейер сервера).

Обе следует избегать.

ViewState, ну, не используя его и находя обходные пути. И ViewBag следует избегать путем использования ViewModels.

6 голосов
/ 12 марта 2012

Viewstate отправляется обратно вместе с содержимым формы на сервер, и, таким образом, значения в нем доступны для обратной отправки.Мешок просмотра хранит в себе значения только до тех пор, пока страница не будет обработана, после чего ViewBag будет удален из памяти.Таким образом, вы можете использовать ViewState для удержания состояния между вызовами, но вы не можете сделать то же самое с ViewBag.

3 голосов
/ 12 марта 2012

ViewBag не отправляется клиенту (браузер).Это просто что-то, что можно использовать для перехода от контроллера к представлению (которое перед отправкой обратно клиенту).

В MVC, если вы получаете обратную передачу с этой страницы, вы не восстановите свое «состояние»Как и Viewstate, единственное состояние, которое у вас есть, это то, что вы отправляете в браузер, и все, что вы отправляете обратно.

...