Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Greșeli
  • Obiecte Sesiune, Aplicație și Cache. Spații goale în scripturi

Obiecte Sesiune, Aplicație și Cache. Spații goale în scripturi

Numărul de locuri în care ați putea folosi sau întâlni semnul @ în ASP.NET a crescut în ultimii câțiva ani și scopul său exact în toate circumstanțele pare să provoace încă confuzie. Iată o prezentare generală a celor mai frecvente locuri pe care le apar și îndrumări privind utilizarea corectă.

Sintaxa Razor

Razor a fost lansat ca o nouă sintaxă de șablon odată cu introducerea cadrului ASP.NET Web Pages. Un nou motor de vizualizare a fost adăugat la MVC 3 care utilizează Razor. Razor permite codul de pe partea serverului cu marcaj HTML pentru a genera un răspuns HTML pe care cadrul îl trimite browserului de mixare. Semnul @ are patru utilizări în Razor:

  • Pentru a deschide un bloc de cod
  • Pentru a desemna o expresie sau o declarație inline
  • Pentru a reda valoarea variabilelor
  • Pentru a reda linii unice de conținut care conțin text simplu sau etichete HTML nepotrivite

Blocurile de cod sunt secțiuni ale codului C# care nu includ nicio ieșire care trebuie redată. Acestea sunt de obicei poziționate în partea de sus a paginii web sau a vizualizării și conțin de obicei logica procesării unei pagini în pagini web sau instrucțiuni simple specifice vizualizării în MVC. Blocul de cod începe cu semnul @ urmat de o acoladă deschisă și se termină cu o acoladă de închidere:

@(ViewBag.Title = "(!LANG:Edit" ; Layout = !} „~/Views/Shared/_EditLayout.cshtml”; }

Conținutul din blocul de cod este cod C# standard. O greșeală comună este să prefixezi variabilele declarate în blocul de cod cu semnul @. Acest lucru nu este necesar.

Expresiile sau declarațiile inline sunt fragmente de cod C# care apar în HTML. Cel mai adesea, acestea sunt folosite pentru a lua decizii cu privire la ce să redați în funcție de condiții sau pentru a repeta colecții pentru a fi afișate în browser:

< ul >@ foreach (var element în rânduri) ( // face ceva )

Expresiile sau declarațiile imbricate nu încep cu un semn @...

< ul >@ foreach (var element în rânduri) ( if (item.Equals(x)) ( // face ceva ) )

Cu excepția cazului în care sunt separate de expresia sau declarația exterioară prin etichete nepotrivite

< ul >@foreach(var element în rânduri)(< li >@ if (item.Equals(x)) ( // face ceva ) }

Semnul @ este folosit în Razor pentru a reda valoarea variabilelor, expresiilor și declarațiilor către browser:

@DateTime.Now @(someCondition ? x:y )

Variabilele din expresii și instrucțiuni nu ar trebui să aibă prefixele semnului @.

Dacă doriți să redați text simplu sau etichete nepotrivite în interiorul unui bloc de instrucțiuni, utilizați semnul @ urmat de două puncte pentru a-i spune lui Razor că ceea ce urmează nu este cod C#:

@ if (articol == x) // text simplu ( @: Ora este @ DateTime .Now ) @ if (articol == x) // etichete nepotrivite ( @:< ul >) altfel ( @:< ol > }

Identificatori

Un identificator în C# este numele dat unui spațiu de nume, clasă, variabilă, proprietate, metodă, interfață etc. Regulile guvernează ceea ce face un identificator valid. Este permis să utilizați un cuvânt cheie C# ca identificator, dar dacă o faceți, trebuie să utilizați semnul @ pentru a preveni erorile de timp de compilare. Vi se recomandă să nu utilizați un cuvânt cheie ca identificator, dar există momente când nu puteți evita să faceți acest lucru.

Unele supraîncărcări ale claselor HtmlHelper (Pagini Web și MVC) acceptă un obiect pentru a reprezenta atributele HTML care urmează să fie redate ca parte a etichetei pe care o reprezintă ajutorul. Următorul exemplu adaugă un atribut de stil la a introducerea textuluiși își setează valoarea la lățime:100%; :

@ Html.TextBoxFor(model => nou ( stil = "lățime: 100%;" ))

Când faci asta tu esti crearea unui tip anonim cu o proprietate numită stil pentru a reprezenta atributele HTML. Dacă tu vrei pentru a seta atributul clasei CSS prin această metodă, trebuie să adăugați o proprietate la tipul anonim numit class - care este un cuvânt cheie C#. Prin urmare, trebuie să utilizați @signul pentru a activa utilizarea clasei în acest caz:

@ Html.TextBoxFor(model => model.FirstName, htmlAttributes: nou(@class="full-width"))

O greșeală pe care o văd repetată destul de des pe forumurile ASP.NET este aplicarea semnului @ tuturor celorlalte proprietăți de tip anonim, ceea ce pur și simplu nu este necesar. Unii oameni chiar cred că semnul @ folosit aici face parte din regulile de sintaxă Razor. "Nu este. Utilizarea lui" aici a precedat Razor cu mult.

Literale șiruri textuale

Un șir literal literal în C# constă din semnul @ urmat de un șir literal între ghilimele duble și terminat cu punct și virgulă, de ex.

var s = @"Bună lume" ;

Două avantaje ale utilizării unui șir literal literal includ faptul că trebuie să scăpați doar de ghilimele duble (dublandu-le); iar șirul se poate întinde pe mai multe linii în cod fără a necesita caractere de continuare. Din aceste motive, literalele șiruri textuale sunt cele mai potrivite pentru reprezentarea căilor (care altfel ar putea avea nevoie de evadarea barelor oblice) și a modelelor de expresie regulată (care, de asemenea, pot necesita evadarea barelor oblice inverse).

Regex re = regex nou ( @"\w\d(1,3)\.\d(1,3)\.\d(1,3).\d(1,3)\w");

Ele sunt, de asemenea, utile pentru a reprezenta blocuri mari de text dacă trebuie incluse în cod într-o manieră lizibilă, cum ar fi instrucțiunile SQL care ar putea fi utilizate în aplicațiile de pagini web:

varsql = @"SELECT p.ProductName, o.UnitPrice, o.Quantity, (o.UnitPrice * o.Quantity) - (o.UnitPrice * o.Quantity * o.Discount) Ca TotalCost FROM OrderDetails o INNER JOIN Produse p ON o. ProductID = p.ProductID WHERE o.OrderID = @0";

Utilizarea semnului @ în acest context nu are nimic de-a face cu sintaxa Razor.

rezumat

Dacă v-ați întrebat vreodată când și unde ar trebui să utilizați semnul @ în codul dvs. ASP.NET, sperăm că acest articol v-a ajutat să vă rezolvați confuzia.

Clasa de pagină

Acum că ați văzut care este ciclul de viață al unei pagini și cum pagina conține controale, nu strica să subliniați că pagina în sine este, de asemenea, instanțiată ca obiect de control. În realitate, toate formularele web sunt de fapt instanțe ale clasei Page din ASP.NET, care se află în spațiul de nume System.Web.UI.

Probabil ați ghicit deja acest lucru observând că fiecare clasă de cod din spatele moștenește în mod explicit de la System.Web.UI.Page. Aceasta înseamnă că fiecare formular web pe care îl creați primește imediat o cantitate imensă de funcționalități, cum ar fi metoda FindControl() pe care am văzut-o până acum și proprietatea IsPostBack. În plus, moștenirea de la Page oferă codului tău acces la următoarele proprietăți extrem de utile:

Multe dintre aceste proprietăți corespund obiectelor interne care ar putea fi utilizate în paginile web ASP.NET clasice. Cu toate acestea, în ASP clasic, această funcționalitate a fost accesată prin obiecte încorporate, care erau întotdeauna disponibile. În ASP.NET, fiecare dintre aceste obiecte încorporate corespunde de fapt unei proprietăți Page, care oferă o instanță a unei clase complet funcționale.

Aceste obiecte sunt descrise mai detaliat în secțiunile următoare.

Obiecte Sesiune, Aplicație și Cache

Obiectul Session este o instanță a clasei System.Web.SessionState.HttpSessionState. Este conceput pentru a stoca orice tip de date de utilizator care trebuie să persistă între solicitările paginilor web. Obiectul Session oferă acces în dicționar la un set de perechi nume/valoare reprezentând datele utilizatorului pentru acea sesiune. Starea sesiunii este adesea folosită pentru a păstra informații precum numele și ID-ul unui utilizator, un coș de cumpărături sau alte articole care sunt eliminate atunci când utilizatorul nu mai vizitează paginile unui site web.

Obiectul Aplicație este o instanță a unei clase System.Web.HttpApplicationState. Ca obiect sesiune, este și un dicționar de date nume-valoare. Cu toate acestea, aceste date sunt globale pentru întreaga aplicație.

În ceea ce privește obiectul Cache, acesta este o instanță a clasei Cache.cache.web.sistem. De asemenea, stochează informații globale, dar oferă un mecanism de stocare mai scalabil, deoarece ASP.NET poate șterge obiecte dacă serverul rămâne fără memorie. Ca și alte seturi de stări, este în esență o colecție de obiecte nume-valoare, dar puteți, de asemenea, să setați politici de expirare personalizate și să definiți dependențe pentru fiecare element.

Alegerea modului de implementare a managementului de stat este una dintre sarcinile cheie în dezvoltarea unei aplicații web.

Solicitare obiect

Obiectul Request este o instanță a clasei System.Web.HttpRequest. Acest obiect reprezintă valorile și proprietățile solicitării HTTP care au dus la încărcarea paginii. Conține toți parametrii legați de URL, precum și toate celelalte date care au fost trimise de client. O mare parte din informațiile furnizate de obiectul Request sunt împachetate în mai multe abstracții. nivel inalt(de exemplu, împachetarea modelului de control web ASP.NET), așa că nu este nici măcar aproape de a fi la fel de important ca în dezvoltarea ASP clasică.

Cu toate acestea, obiectul Request poate fi folosit în continuare, de exemplu, pentru a afla ce browser folosește clientul sau pentru a crea module cookie și apoi a examina conținutul acestora.

Tabelul de mai jos listează unele dintre cele mai frecvent utilizate proprietăți ale obiectului Request:

Proprietățile obiectului HttpRequest
Proprietate Descriere
ID anonim Identifică în mod unic utilizatorul curent dacă a fost activat accesul anonim.
ApplicationPath și PhysicalApplicationPath ApplicationPath preia locația directorului virtual (URL-ul) al aplicației ASP.NET, iar PhysicalPath preia locația directorului său „real”
Browser Oferă o referință la un obiect HttpBrowserCapabilities, care conține proprietăți care descriu diferite funcționalități ale browserului, cum ar fi dacă acceptă elemente controale ActiveX, cookie-uri, VBScript și cadre
ClientCertificate Un obiect HttpClientCertificate A care furnizează certificatul de securitate pentru cererea curentă, dacă există
Cookie-uri Oferă o colecție de cookie-uri trimise cu această solicitare
FilePath și CurrentExecutionFilePath Returnează calea reală a fișierului (relativă la server) pentru pagina în execuție curentă. FilePath reprezintă pagina care a început procesul de execuție. Acesta este același cu CurrentExecutionFilePath, cu excepția cazului în care ați mutat utilizatorul pagina noua fără o redirecționare (de exemplu, folosind metoda Server.Transfer()), caz în care CurrentExecutionFilePath reflectă pagina nouă, iar FilePath specifică pagina originală
Formă Reprezintă colecția de variabile de formular trimise înapoi la pagină. În cele mai multe cazuri, în loc să utilizați o anumită colecție, veți prelua aceste informații din proprietățile controlului.
Anteturi și variabile de server Oferă o colecție de dicționar de anteturi HTTP și variabile de server, indexate după nume. Aceste colecții constau în cea mai mare parte din informațiile de nivel scăzut care au fost trimise de browser odată cu solicitarea web (de exemplu, informații despre tipul de browser, funcționalitatea pe care o acceptă, setările de limbă, acreditările utilizate pentru autentificarea date etc.). De obicei, este mult mai ușor să obțineți aceste informații din alte proprietăți ale obiectului HttpRequest sau claselor ASP.NET de nivel superior.
IsAuthenticated și IsSecureConnection Returnează true dacă utilizatorul este autentificat cu succes și utilizatorul este conectat prin Secure Sockets Layer (SSL)
IsLocal Returnează true dacă utilizatorul solicită pagina de la computerul local
Șir de interogare Furnizează parametrii trecuți în șirul de interogare
Url și UrlReferrer Returnează un obiect Uri reprezentând adresa curentă a paginii și pagina de la care provine utilizatorul (pagina anterioară care conține un link către această pagină)
Agent utilizator Un șir care reprezintă tipul de browser. Internet Explorer furnizează valoarea MSIE pentru această proprietate. ASP.NET folosește aceste informații pentru a afla ce tip de browser în cauză, și, prin urmare, pentru a determina ce funcționalitate ar trebui să accepte acel browser (cum ar fi cookie-uri, JavaScript etc.). Acest lucru, la rândul său, poate afecta modul în care sunt redate controalele web.
UserHostAddress și UserHostName Preluați informații despre adresa IP și numele DNS al clientului de la distanță. Aceste informații pot fi accesate și prin colecția ServerVariables. Cu toate acestea, din cauza transmiterii adresele de rețea(Network Address Translation - NAT) nu este întotdeauna semnificativ. În funcție de modul în care vă conectați la Internet, mulți clienți pot împărtăși aceeași adresă IP (de exemplu, adresa IP a computerului gateway). În plus, adresa IP se poate modifica și după ce se fac mai multe solicitări.
Limbi utilizator Oferă o matrice de șiruri sortate care listează preferințele de limbă ale clientului. Poate fi util la crearea paginilor multilingve

Obiect de răspuns

Obiectul Response este o instanță a clasei System.Web.HttpResponseși reprezintă răspunsul serverului web la o solicitare a clientului. În dezvoltarea ASP clasică, obiectul Response a fost singura modalitate de a trimite în mod programatic text HTML către client.

Controalele serverului conțin acum metode imbricate orientate pe obiecte pentru a se reda. Dezvoltatorul trebuie doar să stabilească valorile proprietăților lor. Deci obiectul Response nici măcar nu se apropie de a fi atât de central ca înainte.

Următorul tabel listează câțiva dintre cei mai des utilizați membri ai clasei HttpResponse:

Membrii clasei HttpResponse
Metoda sau proprietatea Descriere
BufferOutput Când această proprietate este setată la true (implicit), pagina nu este trimisă clientului până când nu a fost redată și este gata să fie trimisă în întregime, în loc să fie trimisă în bucăți. În unele scenarii specifice, este logic să setați această proprietate la fals.
Cel mai evident exemplu este atunci când un client descarcă un fișier mare. Dacă proprietatea BufferOutput este setată la false, clientul va vedea caseta de dialog Salvare și va putea selecta un nume de fișier înainte ca acel fișier să fie descărcat complet
Cache Această proprietate se referă la un obiect HttpCachePolicy, care vă permite să configurați stocarea în cache a ieșirilor
Cookie-uri Această proprietate oferă acces la colecția de cookie-uri trimise împreună cu răspunsul. Poate fi folosit pentru a adăuga cookie-uri suplimentare
Expiră și Expiră Absolut Aceste proprietăți pot fi utilizate atunci când memorarea în cache a codului HTML redat al paginii pentru a îmbunătăți performanța la solicitările ulterioare.
IsClientConnected Aceasta este o valoare booleană care indică dacă clientul este conectat la server. Dacă nu este deja conectat, poate fi necesar să opriți o operațiune lungă
redirecţiona() Această metodă face ca browserul să solicite o adresă URL diferită care indică către o nouă pagină de aplicație web sau către un alt site web
RedirectPermanent() Această metodă redirecționează browserul către o nouă adresă URL, la fel ca metoda Redirect(). Diferența este că folosește codul stări HTTP 301 (care indică faptul că pagina a fost mutată permanent), nu 302 (care indică că pagina a fost mutată temporar)
RedirectToRoute() și RedirectToRoutePermanent() Aceste metode sunt similare cu metodele Redirect() și RedirectPermanent(). Singura diferență este că folosesc o rută (un model de adresă URL înregistrată care nu se mapează direct la pagină)
Transfer() Această metodă îi spune ASP.NET să oprească procesarea paginii curente și să navigheze la o pagină de formular web nouă (specificată). Nu necesită un ciclu complet de trimitere și notificare a browserului și a utilizatorului aplicației web
Cerere de transfer() Această metodă este similară cu Transfer(), dar vă permite să transferați utilizatorul pe un alt tip de pagină. De exemplu, poate fi folosit pentru a trimite un utilizator dintr-un formular web ASP.NET către o pagină HTML.
Când este utilizat, întreaga conductă IIS este adusă în joc pentru a procesa noua resursă, împreună cu toate modulele HTTP relevante. Dar există o serie de limitări semnificative asociate cu metoda TransferRequest(). Pentru a-l folosi, trebuie să utilizați Server web IIS 7 în modul integrat. În plus, va trebui să eliberați starea sesiunii (dacă există) pentru a preveni întârzierile mari.
Tipul de conținut Această proprietate reprezintă un antet care spune browserului ce tip de conținut ar trebui să primească. De obicei, formularele web ASP.NET, ca toate paginile web, utilizează conținut de tip text/html (text amestecat cu HTML). Cu toate acestea, în principiu, un handler HTTP personalizat ar putea fi creat pentru a servi alte tipuri de conținut.
OutputStream Această proprietate reprezintă datele trimise către browser ca un flux de octeți de nivel scăzut. Poate fi folosit pentru conectarea la modelul de threading .NET
Scrie() Această metodă vă permite să scrieți text direct în fluxul de răspuns. De obicei, este mai bine să folosiți modelul de control și să lăsați controalele să genereze propriul lor marcaj HTML. Încercarea de a utiliza metoda Response.Write() cu modelul de control lasă dezvoltatorului liber să decidă unde trebuie plasat textul pe pagină.
Cu toate acestea, metoda Response.Write() este importantă în situațiile în care controalele care generează propria lor reprezentare HTML trebuie construite de la zero.
BinaryWrite() și WriteFile() Aceste metode vă permit să luați conținut binar dintr-o matrice de octeți sau dintr-un fișier și să îl scrieți direct în fluxul de răspuns. Nu are sens să le folosiți cu controale de server, dar pot fi foarte utile atunci când creați un handler HTTP personalizat.
De exemplu, puteți crea un handler HTTP care citește datele pentru un document PDF dintr-o intrare în baza de date și le scrie direct în fluxul de răspuns folosind metoda BinaryWrite(). Pe partea clientului, rezultatul final va arăta exact la fel ca și cum utilizatorul ar fi încărcat un fișier PDF static. Când scrieți conținut non-HTML, nu uitați să setați valoarea corespunzătoare pentru proprietatea ContentType

Deplasarea între pagini

Cea mai importantă funcție a clasei HttpResponse este de a oferi un mic set de metode care vă permit să navigați de la o pagină la alta. Cea mai versatilă dintre acestea este metoda Redirect(), care vă permite să redirecționați utilizatorul către o altă pagină. Mai jos este un exemplu de aplicare a acestuia:

// Redirecționează către un fișier din directorul curent. Response.Redirect("PageFlow.aspx"); // Redirecționează către un alt site web. Response.Redirect ("http://www.google.com");

Metoda Redirect() necesită un ciclu complet de trimitere. Practic, trimite browserului un mesaj care îl face să solicite o nouă pagină.

Metoda Redirect() are o versiune supraîncărcată care ia o valoare booleană în al doilea parametru. Această valoare specifică dacă codul paginii ar trebui să continue executarea. În mod implicit, chiar dacă Redirect() redirecționează utilizatorul și închide conexiunea, orice cod rămas din metodă va rula în continuare împreună cu restul evenimentelor paginii. Acest lucru permite curățarea dacă este necesar. Cu toate acestea, dacă cel de-al doilea parametru este setat la adevărat, ASP.NET va opri imediat procesarea paginii, reducând posibil sarcina de lucru a serverului web.

Dacă trebuie să mutați utilizatorul într-un alt formular web în cadrul aceleiași aplicații web, puteți adopta o abordare mai rapidă folosind metoda Server.Transfer(). Cu toate acestea, această metodă are unele particularități. Deoarece redirecționarea are loc pe partea serverului, adresa URL originală rămâne în fereastra browserului web client. De fapt, nu există nicio modalitate prin care browserul să știe că de fapt afișează o altă pagină. Această limitare provoacă probleme atunci când clientul reîmprospătează sau marchează pagina.

În plus, metoda Server.Transfer() nu poate transfera controlul către o pagină non-ASP.NET sau o pagină web care se află într-o altă aplicație web sau site web.

Pentru a trece de la o pagină la alta, este disponibil un alt truc - postare pe mai multe pagini. Vă permite să creați o pagină care se trimite către o altă pagină, ceea ce face posibilă transmiterea tuturor informațiilor despre starea vizualizării și conținutul oricăror controale.

În ASP.NET 4, clasa HttpResponse a introdus o altă metodă de redirecționare a utilizatorului - RedirectPermanent() . Această metodă face același lucru ca Redirect(), adică. trimite un mesaj de redirecționare către browser care indică faptul că trebuie solicitată o nouă pagină. Cu toate acestea, în loc de un cod de stare HTTP 302 (redirecționare temporară), acesta folosește un cod de stare HTTP 301 (care denotă o redirecționare permanentă). Pentru browserele web, această diferență nu contează, dar pentru motoarele de căutare este foarte importantă. Când robot de căutare explorează site-ul web și primește un cod de stare 301, actualizează directorul acestuia motor de căutare, completându-l cu informații despre noua adresă URL.

Aceasta înseamnă că metodele Redirect() și RedirectPermanent() trebuie utilizate în moduri foarte diferite. Metoda Redirect() ar trebui utilizată pentru a oferi navigare normală și control al fluxului în aplicație (de exemplu, atunci când utilizatorul trece printr-un proces de verificare), iar metoda RedirectPermanent() ar trebui să fie utilizată atunci când se solicită o adresă URL veche care a fost anterior suportat dar nu mai este folosit.

De obicei, metoda Redirect() va fi apelată undeva în codul formularului web, în ​​timp ce metoda RedirectPermanent() va fi apelată în codul aplicației, mai precis în metoda Application_BeginRequest() din fișierul global.asax. Acest lucru vă va permite să gestionați toate redirecționările permanente într-un singur loc, fără a fi nevoie să stocați stub-uri pentru paginile vechi. Mai jos este un exemplu:

Protected void Application_BeginRequest(object sender, EventArgs e) ( // Aplicația web nu mai conține pagina about.aspx dacă (Reguest.FilePath == "/about.aspx") ( Response.RedirectPermanent("/about/about-Us) .aspx"); ) // (Ar trebui adăugate mai multe redirecționări aici.) )

Obiect server

Obiectul Server este o instanță a clasei System.Web.HttpServerUtilityși oferă o varietate de metode și proprietăți de ajutor, care sunt enumerate în tabel:

Membrii clasei HttpServerUtility
Metoda sau proprietatea Descriere
MachineName O proprietate care reprezintă numele computerului pe care rulează pagina. Acesta este numele serverului web folosit de computer pentru a-l identifica cu restul rețelei.
GetLastError() Preia obiectul excepție pentru cea mai recentă eroare (sau o referință nulă dacă nu există). Această eroare ar fi trebuit să apară în timpul procesării cererii curente și nu a fost tratată. Cel mai frecvent utilizat într-un handler de evenimente de aplicație care verifică situațiile de eșec.
HtmlEncode() și HtmlDecode() Înlocuiește un șir obișnuit cu un șir valid caractere HTML(si invers)
UrlEncode() și UrlDecode() Înlocuiește un șir obișnuit cu un șir de caractere URL valide (și invers)
MapPath() Returnează calea fizică către fișier corespunzătoare celei specificate cale virtualăîntr-un fișier de pe serverul web. Apelarea MapPath() cu / returnează calea fizică către directorul rădăcină al aplicației web. De asemenea, acceptă căi care conțin un caracter tilde (~) care reprezintă directorul rădăcină al site-ului web (de exemplu, ~/homepage.aspx)
Transfer() Execuție fără mâini către o altă pagină web în aplicatia curenta. Această metodă este similară cu Response.Redirect(), dar este mai rapidă. Nu poate fi folosit pentru a muta utilizatorul pe un site găzduit pe un alt server web sau pe o pagină non-ASP.NET (cum ar fi HTML sau ASP)

Metoda Transfer() este cea mai bună drumul rapid mutarea utilizatorului pe o altă pagină a aplicației. Această metodă nu completează ciclul de trimitere. În schimb, motorul ASP.NET încarcă pur și simplu o pagină nouă și începe să o proceseze. Drept urmare, adresa URL afișată în browserul clientului nu se modifică.

MapPath() este o altă metodă utilă a obiectului Server. De exemplu, să presupunem că doriți să încărcați un fișier numit info.txt din directorul virtual curent. În loc să codificați calea, puteți utiliza metoda Server.MapPath() pentru a converti calea relativă către aplicația dvs. web într-o cale fizică completă.

Codificare HTML și URL

Clasa Server conține, de asemenea, metode care convertesc șirurile obișnuite într-o reprezentare care poate fi utilizată în siguranță ca parte a unui URL sau afișată pe o pagină web. De exemplu, să presupunem că veți afișa următorul text pe o pagină web:

Etichetă

Folosit pentru a indica un paragraf.

Când încercați să scrieți aceste informații pe pagină sau să le puneți într-un control, obțineți următoarele:

Eticheta este folosită pentru a marca un paragraf.

Text

Nu va apărea, iar browserul îl interpretează ca incluzând un paragraf. Pentru a evita acest comportament automat, va trebui să convertiți valorile potențiale problematice în echivalente HTML personalizate. De exemplu,< превратится в < в окончательной HTML-странице, а браузер отобразит этот символ как <. Полную таблицу преобразований символов в HTML-эквиваленты можно найти по адресу www.arininav.ru/js/entities.htm .

Următorul este un exemplu de soluție folosind metoda Server.HtmlEncode():

Label1.Text = Server.HtmlEncode ("Etichetă

Folosit pentru a indica un paragraf.");

Unele controale rezolvă această problemă prin codificarea automată a mânerelor. (Controlul Label Web nu este unul dintre ele. În schimb, vă permite să inserați etichete HTML în orice mod doriți.) De exemplu, setul de bază de controale pentru server HTML conține etichete Text interiorȘi InnerHtml. Când setați conținutul unui control folosind InnerText, toate caracterele speciale sunt convertite automat în echivalentele lor HTML. Totuși, acest lucru nu ajută dacă doriți să setați o etichetă care să conțină un amestec de etichete HTML încorporate și caractere codificate.

Metoda HtmlEncode() este utilă în special dacă preluați valori dintr-o bază de date și nu sunteți sigur dacă textul este un marcaj HTML valid. Folosind metoda HtmlDecode(), puteți normaliza textul dacă trebuie să efectuați operații suplimentare sau comparații cu acesta în cod.

În mod similar, metoda UrlEncode() convertește textul într-o formă care poate fi utilizată într-o adresă URL, eliminând spațiile și alte caractere speciale. Această acțiune este de obicei efectuată asupra informațiilor care trebuie adăugate la șirul de interogare.

Rețineți că metoda HtmlEncode() nu convertește spațiile în spații care nu se întrerupe. Aceasta înseamnă că, dacă există o secvență de caractere de spațiu, browserul va afișa doar un spațiu. Acest efect este nedorit, în ciuda faptului că nu afectează marcajul HTML. Pentru a schimba acest comportament, puteți înlocui manual spații cu spații care nu se rup folosind metoda String.Replace(). Asigurați-vă că această acțiune este efectuată după codificarea șirului și nu înaintea acestuia, altfel secvența de spațiu fix () va fi înlocuită cu caractere și tratată ca text simplu:

// Codifică caractere nevalide. line = Server.HtmlEncode(line); // Înlocuiește spațiile cu spații care nu se rup. line = line.Inlocuire(" ", " ");

În mod similar, metoda HtmlEncode() nu convertește întreruperile de linie într-un descriptor
. Aceasta înseamnă că retururile hard carrier vor fi ignorate, cu excepția cazului în care introduceți în mod special mânere
.

Problema codificării corecte a intrării este mai importantă decât simpla verificare a afișării corecte a datelor. Dacă încercați să afișați date care includ descriptori

Top articole similare