|
Тема |
Re: Custom Controls vs. Server Controls [re: шeф нa Coди Дeвня] |
|
Автор | Savoy (Нерегистриран) | |
Публикувано | 03.11.03 13:04 |
|
|
Мнее съвсем. Или по скоро съвсем не.
User Control (ascx + codebehind) е подходящ за статични нужди или когато можеш логически да групираш няколко контрола в едно. Добър пример за първото е SiteHeader and SiteFooter User Control, а за второто - Login User Control, който съчетва TextBox (username), TextBox (password) and Button (submit), заедно с логиката за authentication в code-behind.
Custom Server Controls са building blocks на ASP.NET. Всички сървърни контроли на Майкрософт, които използваш във Visual Studio, са Custom Controls. Te наследяват пряко от System.Web.UI.Control (Placeholder, Repeater, Xml, LiteralControl) или от System.Web.UI.WebControls.WebControl (всички останали). Специфичното при Server Controls е, че предоставят доста по-добър дизайн-тайм (визуално представяне на пропертитата в Property Browser) и поддъжат едитори - WinForms бекенд с който в дизайн-тайм можеш да кажеш как да изглежда контрола във браузера. Също така можеш да сложиш иконка на контрола и да го добавиш към ToolBox-a на Вижуал Студиото (тези всичките неща не се поддържат от User Controls).
Цената на тази мощност обаче е голяма - Custom Controls се пишат доста трудно, като за целта трябва да си напълно нясно с целия control-lifecycle - тоест да си наясно кога точно и в какъв ред минават всичките events на контрола - OnInit, OnLoad, OnPreRender, OnRender, LоadPostData, LoadViewState, SaveViewState, etc. Докато в нормално ASP.NET програмиране (Page, User Controls) можеш да изкараш спокойно и само с ОnLoad event (Page_Load), при сървърни контроли ще ти се наложи да научиш как бачка фреймъурка отвътре, което не е никак малко, нито просто. Също така сам трябва да персистваш стейта на контрола over postbacks, като сериализираш statefull данните на контрола като XML или String във ViewState-a. И още доста неща... като цяло писането на Custom Controls е най-трудната част от ASP.NET и по-принцип по-добре да не се заемаш ако не ти е ясно за какво става дума.
|
| |
|
|
|