страница структура

Сега, че знаете как да изглежда точки при обработка, уеб формуляри, че е време да ви кажа повече за това как това се вписва в контролите на конвейер сървър модел. За да се визуализира страницата за уеб форма, трябва да си взаимодействат с всички негови съставни контроли. В действителност, уеб формуляр първо се визуализират и след това пита всички контроли на страницата също се визуализират. Всеки един от тези контроли, от своя страна, може да съдържа деца контроли, всички от които също са отговорни за собственото си код за изобразяване.

Веднага след като контролите са извършени, страницата събира генерирания HTML-маркиране в пълна страница. На пръв поглед, процесът може да изглежда малко сложно, но той предлага невероятна сила и гъвкавост, за да се създаде усъвършенстван интерфейс уеб страница.

Показване на контролите дърво

По-долу е пример за код, който упражнява контрол върху търсенето. Всеки път, когато този код разкрива някакъв контрол, тя използва Response.Write () команда, за да добавите към края на предоставената информация, HTML-страница за вида на класа на този контрол и ID, както е показано по-долу:

За да тествате този код, можете да го добавите към събития манипулатор Page.Load. В този случай, преобразуваната съдържанието се показва в горната отпред на контролите. Въпреки това, когато го стартирате обърнете внимание на неочаквано поведение.

Помислете например за уеб форма е показано на фигурата по-долу, която се състои от множество контролни елементи, а някои от тях са организирани в панел с помощта на озаглавена Панел уеб контрол. Той също така съдържа два реда текст статичен HTML:

страница структура

Чрез провеждане на страницата, вие няма да видите пълен списък на органите за управление, но само следния списък:

страница структура

ASP.NET симулира цяла страница с помощта на целите на контрол и елементи, които не съответстват на съдържанието на сървъра, включително. Например, ако вашата страница е сървър контрол, ASP.NET ще създаде LiteralControl обект. представляващи всички статично съдържание на контролния елемент, и друг обект LiteralControl, което представлява съдържанието след това. В зависимост от размера на статично съдържание и метода за неговото разпределение сред други контроли може да получи множество обекти LiteralControl.

Обекти LiteralControl предлагат малко по отношение на функционалност. Например, не можете да зададете на информацията, свързана с стилове, като например цвят и шрифт. Те също така не разполагат с уникални сървърни идентификатори. Въпреки това, може да се манипулира съдържанието LiteralControl използвайки свойствата Text.

ASP.NET прави страница в йерархичен начин. Веднага се визуализира само на най-високо ниво на контрол. Ако тези контроли съдържат други контроли, те имат свои собствени свойства контроли, които предоставят достъп до своите проверки на детето. В страниците разгледана, както и във всички уеб формуляри ASP.NET, всички от контролите вградена в дръжката

. Това означава, че за да се получи информация за достъпно на тази страница от сървърни контроли е необходимо да се проучи клас HtmlForm събирането контроли.

Все пак, това не е необходимо, че всичко ще бъде толкова лесно, тъй като ограничението за това как може да се използва много нива на вложени елементи, не съществува. Да наистина реши този проблем и ще покаже всички контроли на страницата, ще трябва да се създаде рекурсивни програма, която може да се проведе около контролите на дърветата.

Следният код показва как би трябвало да изглежда цялото решение:

Картината показва ново Резултатът - йерархична дърво с всички налични в управление на страницата и схемата им за гнездене:

страница структура

Заглавието на страницата

Както сте видели, можете да конвертирате всеки HTML-елемент в елемент сървър с runat = "сървър" управлението на атрибут, и на страницата може да съдържа неограничен брой HTML контроли. В допълнение към проверките, които добавите уеб форма също може да съдържа отделна управление елемент HtmlHead. осигурява достъп на сървъра ЕВРОВОК .

контрол на дърва, показани в предишния пример, съдържа HtmlHead управление на елементите, както е атрибут runat = "сървър" не е бил приложен към дескриптора на страницата. Въпреки това, по подразбиране Visual Studio винаги се занимава с контрол на сървъра, за разлика от предишните версии на ASP.NET.

Както е случаят с други сървърни контроли, можете да използвате HtmlHead управление за промяна на съдържанието на програмата трябва да се преобразува в дескриптора . Разликата се състои в това, че дръжката Тя не съответства на действителното съдържание, което може да се види на интернет страницата. Вместо това, той съдържа и други подробности като заглавие, мета тагове (приложими за осигуряване на ключови думи в търсачките), както и линкове към стила лист. За да промените някой от тези елементи, използващи един от малкото членове на HtmlHead на класа, които са изброени в таблицата.

Полезните свойства HtmlHead клас

Заглавие HTML-страници, които обикновено се появяват в заглавната лента на браузъра. Този имот може да се променя по време на изпълнение

Обект IStylesheet. който е отговорен за стилове редово дефинирани в заглавката. IStylesheet обект може да се използва за динамично създаване на нови правила за стил на писане код, който призовава своето методи CreateStyleRule () и RegisterStyle ()

Текст в описанието metadeskriptore, който се използва, за да опише създаването на уебсайт в търсачки като Google

Текст в metadeskriptore ключови думи. След като това metadeskriptor използвани от търсачките да определят търсачката класиране за конкретни искания, сега почти всички игнорирани

Използването на събирането и HtmlMeta класа, можете програмно да добавяте и премахвате описания метаданни. Това е полезно, когато искате да добавите metadeskriptory различна от описанието и ключовите думи

Ето един пример, в който информацията за заглавието тагове и мета са определени динамично:

Създаване на динамичен контрол

Използването на колекцията Controls може да създавате програмно и да добавите към страницата за управление на покупка. По-долу е пример за генерирането на нови ключове и да го добавите към панела на адрес:

Можете да стартирате този код във всеки манипулатор събитие. Въпреки това, тъй като страницата вече е създаден, този код винаги ще се добави нов контрол до края на колекцията. В този пример, това означава, че нов бутон ще бъде в долната част на контролния панел.

За да се получи по-голям контрол над динамичен режим на контрол може да се използва заместващ текст - контрол, чиято цел е да постави другите контроли. Ако добавите други контроли със събирането Контроли на контрол на запазеното място, това няма да промени нищо в последния уеб страница. Visual Studio определя визуално представяне на по подразбиране във формата на стандартен етикет по време на проектирането, така че можете да подредите Placeholder елемент където искате. Също така е възможно да се постави динамичен контрол наред с други контроли:

При използване на динамични контроли, имайте предвид, че те съществуват само до следващото получаване на POST. ASP.NET няма да пресъздадете динамично допълнителен контрол. Ако искате да създадете за контрол на няколко пъти, тя трябва да бъде направено в събития манипулатор Page.Load.

Този метод има допълнителното предимство, че позволява използването на динамично състояние на елемент от контрол. Дори и ако състоянието на оглед обикновено е възстановена преди Page.Load на събитието, когато създавате контрола в събитието манипулатор Page.Load ASP.NET използва всяка информация за състоянието на представянето в края на събитието манипулатор. Този процес е автоматичен.

Ако ще да си взаимодействат с контрола по-късно, тя трябва да се задава уникален идентификатор. Този идентификатор може да се използва за извличане на управляващ елемент от контрол на събиране на контейнера. Намери контрол чрез използване на рекурсивни логика търсене, както е показано в контролите например дърво, или да използвате метод статично Page.FindControl (). който търси контрол с идентификационен номер в Page.Controls топ събиране ниво. По-долу е пример, в който чрез FindControl () търсения метод за динамично допълнителен контрол, който след това се отстранява:

Динамично добавена контроли могат да се справят събития. Той трябва само да се свържете кода за боравене със събития с помощта на делегата. Вие трябва да направите това в събития манипулатор Page.Load. Както е показано, всички събития, свързани с контролите са генерирани след Page.Load събития. Ако чакате дълго, събитието манипулатор ще бъдат свързани в случай на задействане, а и няма да бъде в състояние да отговори на него:

Динамични контролни елементи са особено силни, когато се комбинира с потребителски контроли (т.е., блокове от потребителски интерфейс, които позволяват многократно използване, и могат да съдържат редица контрол и HTML).