Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2011-07-23

ASP.NET ViewState

Срывая покровы. Весьма полезная (дотнетовцам) статья про ASP .NET ViewState.

А вот документация на MSDN, которая описывает то, как элементы управления хранят свое состояние между postback'ами. Нельзя сказать, что эта документация неверна, но в ней содержится утверждение, которое не до конца правильно:

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

Похоже, что здесь подразумевается что все, что пихается во ViewState, будет отправляться клиенту. НЕПРАВДА! Понятно, откуда берется такая суматоха вокруг ViewState'а. Нигде в Интернете я не смог найти 100%-но полного и точно описания его работы! Лучшая статья, которую я видел, это статья Скотта Митчелла. Она обязательна к прочтению. Однако она не объясняет взаимодействие родительских и дочерних элементов управления во время инициализации и трекинга ViewState'а, и уже это вызывает множество непониманий ViewState'а, по крайней мере исходя из моего опыта.

Так что первая цель этой статьи — дать исчерпывающее объяснение того, как функционирует ViewState, от начала до конца, по возможности закрывая белые пятна, оставленные другими статьями. После подробного описания процесса ViewState'а я покажу несколько ошибок, которые допускают разработчики при использовании ViewState'а, как правило даже не догадываясь об этом, и как эти ошибки исправлять. Следует отметить, что я писал эту статью на основе ASP.NET 1.x. Однако изменений в механизме ViewState'а в ASP.NET 2.0 очень мало. В частности, появился новый тип ViewState'а — ControlState, однако он используется точно также, как и ViewState, поэтому мы можем его просто проигнорировать.

Сперва позвольте мне объяснить, почему я считаю, что понимание сути ViewState'а очень важно:

Непонимание ViewState'а ведет к...

Потере важной информации
Атакам на ViewState
Плохой производительности — вплоть до ОТСУТСТВИЯ ПРОИЗВОДИТЕЛЬНОСТИ
Плохой расширяемости — как много пользователей вы сможете обслужить, если каждый из них будет отправлять 50k с каждым запросом?
Плохому дизайну вообще
Головной боли, тошноте, головокружениям и необратимому искривлению формы надбровных дуг.
...

habrahabr.ru/blogs/net/119537

Сцылки на оригинал статьи я не нашел.

Из каментов:

Подскажите, если используешь ASP.NET MVC, то имеет ли смысл читать статью?

Вьюстейт с MVC использовать нельзя, концепция этих подходов к разработке разная.
MVC принимает http протокол как неизбежность, и не пытается оградить разработчиков от него, городя абстракции, жизненный цикл страницы, вьюстейты и апдейтпанели. Плюс используется MVC паттерн, что делает проекты дружелюбными к юнит тестам, например.
Web Forms же пытается косить под WinForms, но жизнь есть жизнь, и у такой дружелюбности к тем, кто переходит с вин формс, есть своя цена вроде таких штук.

Вот так как-то.

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)