structura paginii

Acum, că știi cum să te uiți pași de prelucrare în formularele web, e timpul să-ți spun mai multe despre modul în care acest lucru se potrivește în modelul transportor de control server. Pentru a vizualiza pagina de formular web, trebuie să interacționeze cu toate controalele sale constitutive. De fapt, o formă de web se vizualizează mai întâi și apoi solicită toate comenzile de pe pagină este vizualizată. Fiecare dintre aceste controale, la rândul lor, pot conține controale pentru copii, toate acestea sunt, de asemenea, responsabile pentru propriul lor cod de randare.

De îndată ce controalele sunt redate, pagina colectează generat HTML-marcaj în pagina completă. La prima vedere, procesul poate parea un pic complicat, dar oferă o putere uimitoare și flexibilitate pentru a crea interfața avansată a paginilor web.

Se afișează controale de copac

Mai jos este un exemplu de cod care efectuează controale de căutare. Ori de câte ori acest cod dezvăluie un anumit control, se folosește comanda Response.Write () pentru a adăuga la sfârșitul informațiilor pagina HTML prestate despre tipul clasei de acest control și ID-ul, după cum se arată mai jos:

Pentru a testa acest cod, îl puteți adăuga la evenimentele handler Page.Load. În acest caz, conținutul convertit este afișat în partea din față partea superioară a comenzilor. Cu toate acestea, atunci când îl rulați vă acorde o atenție la un comportament neașteptat.

De exemplu, considerăm o formă web prezentată în figura de mai jos, care cuprinde o multitudine de elemente de control, iar unele dintre ele sunt organizate într-un panou folosind intitulat Panou de control web. Acesta conține, de asemenea, două linii de text HTML statice:

structura paginii

Prin rularea această pagină, veți vedea, nu o listă completă de controale, dar numai cu următoarea listă:

structura paginii

ASP.NET simulează o întreagă pagină folosind obiectele de control și elemente care nu se potrivesc cu conținutul de server, inclusiv. De exemplu, dacă pagina dvs. este un server de control, ASP.NET va crea LiteralControl obiect. reprezentând tot conținutul static la elementul de comandă, și un alt obiect LiteralControl, ceea ce reprezintă conținutul ulterior. În funcție de cantitatea de conținut static și metoda distribuției sale, printre alte controale pot primi o multitudine de obiecte LiteralControl.

Obiecte LiteralControl oferă puțin în ceea ce privește funcționalitatea. De exemplu, nu puteți seta informațiile asociate cu stiluri, cum ar fi culoarea și fontul. Ei, de asemenea, nu au identificatori unici de server. Cu toate acestea, se poate manipula conținutul LiteralControl utilizând proprietățile sale text.

ASP.NET face pagina într-o manieră ierarhică. Imediat vizualizate doar cel mai înalt nivel de control. În cazul în care aceste controale conțin alte controale, ei au propriile lor proprietăți Controls, care oferă acces la controalele lor copil. În paginile vizualizate, la fel ca în toate formele web ASP.NET, toate comenzile încorporate în mâner

. Acest lucru înseamnă că, în scopul de a obține informații cu privire la disponibile pe această pagină de control de tip server este necesară pentru a investiga clasa HtmlForm de colectare a comenzilor.

Cu toate acestea, nu este necesar ca totul va fi atât de ușor, deoarece limita la modul în care pot fi folosite in mai multe nivele de elemente imbricate, nu există. Pentru a rezolva această problemă într-adevăr și a afișa toate comenzile de pe pagina, va trebui să creați un program recursiv care poate avea loc în jurul valorii de controalele de copac.

Codul de mai jos arată cum ar trebui să arate întreaga soluție:

Imaginea prezinta noul rezultat - un arbore ierarhic care prezintă toate disponibile în controalele de pagină și schema de cuibărit:

structura paginii

Titlul paginii

După cum ați văzut, puteți converti orice element HTML în elementul de server cu Runat = „server“ managementul atribut, iar pagina poate conține un număr nelimitat de controale HTML. În plus față de controalele pe care le adăugați formular Web poate cuprinde, de asemenea, un management separat element de HtmlHead. oferă acces la server descriptor .

Controalele din lemn prezentate în exemplul anterior, conține HtmlHead de management ca element Runat atribut = „server“ nu a fost aplicat la descriptor pe pagina. Cu toate acestea, în mod implicit Visual Studio întotdeauna se ocupa server de control, spre deosebire de versiunile anterioare ale ASP.NET.

Așa cum este cazul cu alte controale de server, puteți utiliza controlul HtmlHead pentru a modifica conținutul programului care urmează să fie convertită în descriptor . Diferența constă în faptul că mânerul Aceasta nu corespunde cu conținutul real, care poate fi vazut pe pagina web. În schimb, acesta conține alte detalii, cum ar fi din titlu, meta tag-uri (util pentru a furniza cuvinte cheie în motoarele de căutare), și link-uri către foaia de stil. Pentru a modifica oricare dintre aceste elemente utilizând unul dintre puținii membri ai HtmlHead de clasă, care sunt listate în tabel.

Clasa de proprietăți utile HtmlHead

Titlu HTML pagini, care sunt de obicei afișate în bara de titlu a browser-ului. Această proprietate poate fi modificată în timpul rulării

Object IStylesheet. care este responsabil pentru stilurile inline definite în antet. IStylesheet obiect poate fi, de asemenea, utilizat pentru a crea dinamic noi reguli de stil prin scrierea de cod care solicită metode CreateStyleRule sale () și RegisterStyle ()

Text în descriere metadeskriptore, care este folosit pentru a descrie crearea unui site în motoarele de căutare, precum Google

Textul în cuvinte cheie metadeskriptore. Odată ce acest metadeskriptor utilizate de motoarele de căutare pentru a determina Topul motor de căutare pentru cereri specifice, acum aproape toate ignorate

Folosind colectarea și clasa HtmlMeta, puteți adăuga programatic și elimina descriptori de metadate. Acest lucru este util atunci când doriți să adăugați diferite metadeskriptory din descrierea și cuvintele cheie

Aici este un exemplu în care informația despre titlu și meta tag-urile sunt setate în mod dinamic:

Crearea unui control dinamic

Utilizarea comenzilor de colectare poate fi crea programatic și se adaugă la pagina de gestionare element. Mai jos este un exemplu de generarea de chei noi și adăugați-l la panoul de la:

Puteți rula acest cod în orice tratare a evenimentului. Cu toate acestea, deoarece pagina a fost deja creat, acest cod va adăuga întotdeauna un nou control la sfârșitul colecției. În acest exemplu, acest lucru înseamnă că un nou buton va fi în partea de jos a Panoul de control.

Pentru a obține mai mult control asupra regimului de control dinamic poate fi utilizat SUBSTITUENT - de control al cărui scop este de a plasa celelalte comenzi. Dacă adăugați alte controale la colectarea comenzilor substituentului de control, acesta nu se va schimba nimic pe pagina web finală. Visual Studio definește reprezentarea vizuală a unui implicit sub forma unei etichete convenționale în timpul de proiectare, astfel încât să puteți aranja elementul SUBSTITUENT oriunde doriți. De asemenea este posibil de a plasa controlul dinamic, printre alte controale:

Atunci când se utilizează controale dinamice, să fie conștienți de faptul că ele există doar până la următoarea postback. ASP.NET nu va re-crea un control dinamic adăugat. Dacă doriți să creați de control de mai multe ori, aceasta ar trebui să fie făcut în evenimentele handler Page.Load.

Această metodă are avantajul suplimentar de a permite utilizarea unei stări dinamice a unui element de control. Chiar dacă starea de vedere este, de obicei, restaurată înainte de Page.Load eveniment, atunci când creați controlul în tratare a evenimentului Page.Load ASP.NET utilizează orice informații despre starea depunerii la sfârșitul handler evenimentului. Acest proces este automat.

Dacă aveți de gând să interacționeze cu control ulterior, acesta ar trebui să fie atribuit un identificator unic. Acest identificator poate fi folosit pentru a extrage elementul de control din comenzile de containere de colectare. Găsiți un control utilizând o logică de căutare recursiv, după cum sa demonstrat în controalele exemplu de copac sau utilizați Page.FindControl statică metoda (). care caută un control cu ​​ID-ul specificat în top Page.Controls de colectare nivel. Mai jos este un exemplu în care prin FindControl () căutări metodă pentru adăugat dinamic de control, care este apoi eliminat:

Dynamically adăugat controale se pot ocupa de evenimente. Este nevoie doar să se conecteze codul de tratare a evenimentului folosind delegatul. Trebuie să faceți acest lucru în evenimentele handler Page.Load. Așa cum este prezentat anterior, toate evenimentele legate de controalele sunt generate după evenimente Page.Load. Dacă așteptați mai, handler eveniment va fi conectat după eveniment de declanșare, și nu va fi în măsură să răspundă la aceasta:

Elementele de control dinamice sunt deosebit de puternice atunci când sunt combinate cu control pentru utilizator (adică, blocuri de interfață cu utilizatorul care permit utilizarea multiplă, și pot conține un număr de controale și HTML).