2012-03-12 2 views
12

Существует ли разница между ViewState в Webforms и ViewBag в MVC? Они, похоже, «одни и те же». И может использоваться одинаково. Я спрашиваю, потому что MVC продвигает веб-сайт без состояния и не набивает данные на странице, что приводит к раздуванию и более низкой производительности. Но, похоже, вы тоже можете это сделать в MVC. Кажется, все, что они сделали, просто придает ему новое имя.Разница между сумкой и витриной?

ответ

6

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

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

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

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

+1

ViewBag имеет свое место, например, с помощью DropDownList и передачи selectlist. Изучите MVC Scaffolded CRUD - он использует ViewBag. Ваше заявление слишком сильное. Возможно, модели просмотра предпочтительнее ViewBag, если это необходимо. см. http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications – RickAndMSFT

+1

@ Rick.Anderson-at-Microsoft.com - согласился, что мое заявление может быть сильным, но не в случае DropDownList. Ваш ViewModel может (и должен) иметь свойство для 'SelectList', которое может быть связано с вашим представлением. Абсолютно никакой необходимости в ViewBag нет. – RPM1984

+0

Код SelectList генерируется инструментами ASP.NET MVC, и большинство людей считают, что это правильный выбор для автоматического scaffolder. – RickAndMSFT

2

ViewBag не отправляется клиенту (браузеру). Его чисто что-то использовать для перехода от контроллера к представлению (который перед его отправкой обратно клиенту).

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

5

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

Смежные вопросы