Descrierea obiectului Response. Crazy Forms Răspunsuri delicioase html

Generarea unui răspuns de la controlori

După ce controlorul a terminat de procesat cererea, de obicei trebuie să genereze un răspuns. Când creăm un controler de nivel scăzut prin implementarea directă a interfeței IController, trebuie să ne asumăm responsabilitatea pentru fiecare aspect al procesării unei cereri, inclusiv pentru generarea unui răspuns către client.

De exemplu, pentru a trimite un răspuns HTML, trebuie să creați și să compuneți datele HTML, apoi să le trimiteți clientului folosind metoda Response.Write (). De asemenea, pentru a redirecționa browserul utilizatorului către o adresă URL diferită, trebuie să apelați metoda Response.Redirect () și să îi transmiteți adresa URL necesară. Ambele abordări sunt demonstrate în codul de mai jos, care arată extensii la clasa BasicController pe care am creat-o într-un articol anterior folosind implementarea interfeței IController:

Utilizarea System.Web.Mvc; folosind System.Web.Routing; spațiu de nume ControllersAndActions.Controllers (clasa publică BasicController: IController (public void Execute (RequestContext requestContext)) (controller de șir = (șir) requestContext.RouteData.Values ​​​​["controller"]; șir de acțiune = (șir) requestContext.RouteData.Values ​​​​["acțiune "]; if (action.ToLower () ==" redirecționare ") (requestContext.HttpContext.Response.Redirect (" / Derived / Index ");) else (requestContext.HttpContext.Response.Write (string. Format (" Controller: (0), Metoda de acțiune: (1) ", controler, acțiune));))))

Aceeași abordare poate fi aplicată dacă controlerul moștenește din clasa Controller. Clasa HttpResponseBase care este returnată la citirea proprietății requestContext.HttpContext.Response în metoda Execute () este disponibilă prin proprietatea Controller.Response, așa cum se arată în exemplul de mai jos, care oferă extensii la clasa DerivedController, creată și mai devreme prin moștenire. din clasa Controller:

Utilizarea sistemului; folosind System.Web; folosind System.Web.Mvc; namespace ControllersAndActions.Controllers (clasa publică DerivedController: Controller (public ActionResult Index () (// ...) public void ProduceOutput () (dacă (Server.MachineName == "ProfessorWeb") Response.Redirect ("/ Basic / Index" ); else Response.Write ("Controller: Derivat, Metoda de acțiune: ProduceOutput");)))

Metoda ProduceOutput () folosește valoarea proprietății Server.MachineName pentru a decide ce răspuns să trimită clientului. ("ProfessorWeb" este numele mașinii mele de dezvoltare.)

În timp ce această abordare de a genera un răspuns către utilizator funcționează, există mai multe probleme cu aceasta:

    Clasele de controler trebuie să conțină informații despre structura HTML sau URL, ceea ce face ca clasele să fie dificil de citit și de întreținut.

    Un controler care generează un răspuns direct la ieșire este dificil de testat unitar. Va trebui să creați implementări simulate ale obiectului Response și apoi să puteți procesa ieșirea de la controler pentru a determina ce este. Aceasta poate însemna, de exemplu, nevoia de a implementa marcajul HTML de analiză pentru cuvintele cheie, care este un proces lung și obositor.

    Această manipulare a micilor detalii ale fiecărui răspuns este complexă și predispusă la erori. Unii programatori le place controlul absolut oferit de construirea unui controler de nivel scăzut, dar acest lucru tinde să se complice foarte repede.

Din fericire, Cadrul MVC are un instrument la îndemână care rezolvă toate aceste probleme - rezultatele acțiunii. Următoarele secțiuni explică conceptul de rezultate ale acțiunii și arată căi diferite utilizarea sa pentru a genera răspunsuri de la controlori.

Rezultatele acțiunii

Rezultatele acțiunilor din cadrul MVC sunt folosite pentru a separa declarațiile de intenție de execuția intenției (ne pare rău pentru tautologie). Conceptul va părea simplu după ce te simți confortabil cu el, dar este nevoie de ceva timp pentru a înțelege din cauza unui anumit grad de indirect.

În loc să se ocupe direct de obiectul Response, metodele de acțiune returnează un obiect dintr-o clasă derivată din ActionResult, care descrie care ar trebui să fie răspunsul de la controler - de exemplu, redarea vizualizării sau redirecționarea către o adresă URL sau o metodă de acțiune diferită. Totuși (aceasta este aceeași indirectă) răspunsul nu este generat direct. În schimb, este creat un obiect ActionResult, pe care Cadrul MVC îl procesează pentru a obține rezultatul după ce metoda de acțiune a fost apelată.

Sistemul de rezultat al acțiunii este un exemplu de model de proiectare Command. Acest șablon reprezintă scenarii în care stocați și transmiteți obiecte care descriu operațiunile de efectuat.

Când Cadrul MVC primește un obiect ActionResult de la o metodă de acțiune, apelează Metoda ExecuteResult (). definite în clasa acestui obiect. Implementarea rezultatelor acțiunii funcționează apoi cu obiectul Response, generând rezultate care se potrivesc cu intenția dvs. Pentru a demonstra acest lucru la locul de muncă, să creăm un folder Infrastructură și să adăugăm un nou fișier de clasă numit CustomRedirectResult.cs cu o implementare ActionResult personalizată, prezentată în exemplul de mai jos:

Utilizarea System.Web.Mvc; spațiu de nume ControllersAndActions.Infrastructure (clasa publică CustomRedirectResult: ActionResult (șir public Url (get; set;) public override void ExecuteResult (context ControllerContext) (string fullUrl = UrlHelper.GenerateContentUrl (Url, context.HttpContext); context.HttpContext); context.HttpContext; )))

Această clasă se bazează pe modul în care funcționează clasa System.Web.Mvc.RedirectResult. Unul dintre beneficiile framework-ului open source MVC este capacitatea de a explora funcționarea interioară a oricărui lucru. Clasa CustomRedirectResult este mult mai simplă decât echivalentul său MVC, dar este suficientă pentru scopurile acestui articol.

La instanțierea clasei RedirectResult, transmitem adresa URL către care ar trebui să fie redirecționat utilizatorul. Metoda ExecuteResult () care va fi executată de Cadrul MVC la finalizarea metodei de acțiune devine Obiect de răspuns pentru o solicitare prin obiectul ControllerContext furnizat de cadru și apelează fie metoda RedirectPermanent () fie metoda Redirect () (acest lucru reflectă exact ceea ce s-a făcut în cadrul implementării IController de nivel scăzut din exemplul de mai devreme în articol).

Utilizarea clasei CustomRedirectResult este ilustrată în exemplul de mai jos, care arată modificările care au fost făcute controlerului derivat:

// ... folosind ControllersAndActions.Infrastructure; spațiu de nume ControllersAndActions.Controllers (clasa publică DerivedController: Controller (public ActionResult Index () (// ...) public ActionResult ProduceOutput () (dacă (Server.MachineName == "MyMachineName") return new CustomRedirectResult (Url = "/ Basic / Index "); else (Response.Write (" Controller: Derivat, Metoda de acțiune: ProduceOutput "); returnează nul;))))

Rețineți că am fost forțați să schimbăm rezultatul metodei de acțiune pentru a returna un ActionResult. Returnăm null dacă nu dorim ca cadrul MVC să facă nimic atunci când metoda noastră de acțiune a fost executată, ceea ce a făcut dacă instanța CustomRedirectResult nu a revenit.

Controlere și acțiuni de testare unitară

Multe părți ale cadrului MVC sunt concepute pentru a face testarea unitară mai ușoară, iar acest lucru este valabil mai ales pentru acțiuni și controlere. Există mai multe motive pentru acest sprijin:

    Puteți testa acțiuni și controlere în afara serverului web. Obiectele context sunt accesate prin clasele lor de bază (cum ar fi HttpRequestBase), care este ușor de batjocorit.

    Nu trebuie să analizați marcajul HTML pentru a testa rezultatele metodei de acțiune. Puteți inspecta ActionResult returnat pentru a vă asigura că obțineți rezultatele așteptate.

    Nu este necesară emularea solicitărilor clienților. Legarea modelului MVC Framework vă permite să scrieți metode de acțiune care primesc intrare în parametrii lor. Pentru a testa o metodă de acțiune, trebuie doar să o apelați direct și să furnizați valorile adecvate ale parametrilor.

Articolele viitoare despre generarea datelor de la controlori vă vor arăta cum să creați teste unitare pentru diferite tipuri de rezultate ale acțiunii.

Rețineți că testarea unitară este doar o parte a imaginii de ansamblu. Comportamentul complex al aplicației apare atunci când metodele de acțiune sunt apelate secvenţial. Testarea unitară funcționează cel mai bine cu alte abordări de testare.

Acum că știți cum funcționează rezultatul personalizat al unei acțiuni de redirecționare, puteți trece la echivalentul acestuia furnizat de cadrul MVC, care este puternic și bine testat de Microsoft. Modificarea necesară la controlerul derivat este prezentată mai jos:

// ... public ActionResult ProduceOutput () (return new RedirectResult ("/ Basic / Index");) // ...

Eliminat din metoda de acțiune operator condițional, ceea ce înseamnă că după lansarea aplicației și navigarea la o adresă URL ca / ​​Derived / ProduceOutput, browserul va fi redirecționat către o adresă URL ca / ​​Basic / Index. Pentru a simplifica codul metodei de acțiune, clasa Controller include metode convenabile de generat tipuri diferite Obiecte ActionResult. Astfel, de exemplu, putem obține același efect ca în exemplul de mai sus, returnând rezultatul metodei Redirect ():

// ... public ActionResult ProduceOutput () (return Redirect ("/ Basic / Index");) // ...

Sistemul de rezultat al acțiunii nu este deosebit de complex, dar în cele din urmă are ca rezultat un cod mai simplu, mai curat și mai consistent, care este ușor de citit și testarea unitară. De exemplu, în cazul unei redirecționări, puteți verifica pur și simplu dacă metoda de acțiune returnează o instanță RedirectResult a cărei proprietate Url conține ținta așteptată.

Cadrul MVC definește multe tipuri de rezultate de acțiune încorporate, care sunt descrise în tabelul de mai jos:

Tipuri ActionResult încorporate
Tip de Descriere Metode de ajutor pentru controler
ViewResult

Redă șablonul de vizualizare specificat sau standard

Vizualizare ()
PartialViewResult

Redă șablonul de vizualizare parțială specificat sau standard

Vizualizare parțială ()
RedirectToRouteResult

Emite o redirecționare HTTP 301 sau 302 către o metodă de acțiune sau o intrare de rută specificată, generând o adresă URL în funcție de configurația de rutare

RedirectToAction ()
RedirectToActionPermanent ()
RedirectToRoute ()
RedirectToRoutePermanent ()
RedirectResult

Oferă o redirecționare HTTP 301 sau 302 către adresa URL dată

Redirecționare ()
RedirectPermanent ()
ContentResult

Returnează date text neformatate în browser, setând suplimentar antetul tipului de conținut

Continut ()
FileResult

Transferă date binare (cum ar fi un fișier de pe disc sau o matrice de octeți în memorie) direct în browser

Fișier ()
JsonResult

Serializează un obiect .NET la format JSONși îl trimite ca răspuns. Acest tip de răspuns este generat mai frecvent atunci când se utilizează Web API și AJAX.

Json ()
JavaScriptResult

Trimite o bucată de cod sursă JavaScript pentru a fi executată de browser

JavaScript ()
HttpUnauthorizedResult

Setează codul de stare a răspunsului HTTP la 401 (însemnând „neautorizat”), ceea ce forțează mecanismul de autentificare curent (autentificare prin formulare sau autentificare Windows) să solicite vizitatorului să se autentifice

Nu
HttpNotFoundResult

Returnează eroare HTTP cu codul 404 - Nu a fost găsit(nu a fost găsit)

HttpNotFound ()
HttpStatusCodeResult

Returnează codul HTTP specificat

Nu
EmptyResult

Facand nimic

Nu

Toate aceste tipuri derivă din clasa ActionResult și multe dintre ele au metode de ajutor convenabile în clasa Controller. Vom demonstra utilizarea acestor tipuri de rezultate în articolele ulterioare.

Să presupunem că trebuie să obținem date de pe site, a căror colectare manuală este imposibilă sau imposibilă din cauza volumului. În acest caz, putem automatiza procesul folosind instrumentele descrise mai jos.

Biblioteca de cereri

Biblioteca Python pentru a face cereri către server și pentru a gestiona răspunsurile. Fundamentul scriptului de analiză și arma noastră principală. Folosind această bibliotecă, obținem conținutul paginii sub formă de html pentru o analiză ulterioară.

cereri de import răspuns = solicitări. get ("https://ya.ru") # get-request print (răspuns. text) # afișa conținutul paginii sarcină utilă = ("key1": "value1", "key2": "value2") răspuns = solicitări. get ("http://httpbin.org/get", params = sarcină utilă) # cerere cu parametri anteturi = ("user-agent": "my-app / 0.0.1") răspuns = solicitări. get (url, headers = anteturi) # cerere cu antete html specifice

API

Interfața de programare a aplicațiilor este o interfață de programare a aplicațiilor furnizată de proprietarul unei aplicații web pentru alți dezvoltatori. Lipsa unui API care să ne poată satisface nevoile este primul lucru de care trebuie să ne asigurăm înainte de a ne grăbi să analizăm sursă pagină și scrieți un parser pentru ea. Multe site-uri populare au propria lor API și documentație care explică cum să le folosească. Putem folosi api în acest fel - formăm o cerere http conform documentației și obținem un răspuns folosind cereri.

BS4

Beautifulsoup4 este o bibliotecă pentru analizarea documentelor html și xml. Vă permite să accesați direct conținutul oricăror etichete în html.

din bs4 import BeautifulSoup soup = BeautifulSoup (raw_html, "html.parser") print (soup. find ("p", class_ = "oarecare-clasă"). text) # scoateți conținutul etichetei „p” de către „some-class”

Driver web Selenium

Datele de pe site pot fi generate dinamic folosind javascript. În acest caz, solicitările + bs4 nu vor putea analiza aceste date. Ideea este că bs4 analizează codul sursă al paginii fără a executa js. Pentru a executa codul js și a obține o pagină identică cu cea pe care o vedem în browser, puteți utiliza driverul web selenium - acesta este un set de drivere pentru browsere diferite furnizarea de biblioteci pentru lucrul cu aceste drivere.

Și dacă există o autorizație?

session = requests.Session () data = ("login_username": "login", "login_password": "parolă") url = "http://site.com/login.php" răspuns = session.post (url, date = date)

Dar ce se întâmplă dacă site-ul este interzis pentru multe solicitări?

  • Setați o întârziere între solicitări:

răspuns = requests.get (url, timeout = (10, 0.01)) # timeout conexiune, timeout citire (în secunde)

  • Pretindeți-vă că sunteți un browser care folosește driverul web selenium sau trecând conținutul antetului user-agent, formând o solicitare:

user_agent = ("Mozilla / 5.0 (X11; Ubuntu; Linux x86_64; rv: 50.0)" "Gecko / 20100101 Firefox / 50.0") request = requests.get (url, headers = ("User-Agent": user_agent))

  • Utilizarea proxy:

Traducere: Vlad Merzhevich

Toată lumea știe despre formularele web, nu? Introduceți eticheta

, mai multe , poate , terminăm totul cu butonul și ai terminat.

Nici măcar nu știi jumătate despre asta. HTML5 definește peste o duzină de noi tipuri de câmpuri pe care le puteți utiliza în formularele dvs. Și când spun folosire, vreau să spun că pot fi folosite chiar acum - fără nicio lame, hack-uri sau soluții alternative. Nu vă faceți griji prea mult, nu vreau să spun că toate aceste noi funcții interesante sunt de fapt acceptate în orice browser. Absolut nu, nu vreau să spun asta prin toată lumea. V browsere moderne, da, formularele tale vor arăta tot ce sunt capabili. Dar în browserele mai vechi, formularele dvs. vor funcționa în continuare, deși nu pe deplin. Adică, aceste capabilități se degradează elegant în fiecare browser. Chiar și în IE6.

Text prompt

Asistență text de ajutor
IE Firefox Safari Crom Operă iPhone Android
- 4.0+ 4.0+ 4.0+ 11.0+ 4.0+ -

Prima îmbunătățire HTML5 în ceea ce privește formularele este capacitatea de a seta o solicitare de text într-un câmp de introducere. Un astfel de text este afișat în câmpul de introducere dacă câmpul este gol și nu are focalizare. De îndată ce faceți clic în câmpul de introducere (sau accesați-l prin Tab), textul indiciu dispare.

Probabil ați văzut textul indiciu mai devreme. De exemplu, Mozilla Firefox include text indiciu în bara de adresa cu legenda „Căutare în marcaje și jurnal”.

Când faceți clic pe bara de adrese, textul indiciu dispare.

Acesta este modul în care puteți include text indiciu în formularele dvs.


substituent = „(! LANG: Căutați în marcaje și istoric" !}>

Browserele care nu acceptă atributul substituent îl ignoră pur și simplu. Fără vătămare sau încălcare.

Întrebați profesorul Markup

☞ Î. Pot folosi marcajul HTML pentru atributul substituent? Vreau să inserez o poză sau poate să schimb culorile.

A. Atributul substituent poate conține doar text, fără cod HTML. Cu toate acestea, există extensii speciale CSS care vă permit să setați stilul textului în unele browsere.

Câmpuri de focalizare automată

Suport autofocus
IE Firefox Safari Crom Operă iPhone Android
- - 4.0+ 3.0+ 10.0+ - -

Site-urile pot folosi JavaScript pentru a se concentra automat pe primul câmp de formular. De exemplu, pe pagina de start Google.com câmpul pentru introducerea motoarelor de căutare are autofocus Cuvinte cheie... Deși acest lucru este convenabil pentru majoritatea oamenilor, poate fi enervant pentru utilizatorii cu putere și persoanele cu nevoi speciale. Dacă apăsați pe spațiu în timp ce așteptați derularea paginii, nu va exista derulare deoarece accentul este pus pe câmpul de introducere a formularului (se va introduce un spațiu în câmp în loc de defilare). Dacă mutați focalizarea într-un alt câmp de introducere în timp ce pagina se încarcă, scriptul de focalizare automată a site-ului poate muta „util” focalizarea înapoi la câmpul de introducere original, întrerupând tastarea și determinându-vă să tastați în locul greșit.

Deoarece focalizarea automată funcționează prin JavaScript, poate fi dificil să se ocupe de aceste cazuri marginale și puține șanse pentru persoanele care nu doresc ca o pagină web să-și fure concentrarea.

Pentru a rezolva aceste probleme, HTML5 introduce atributul autofocus pe toate elementele formularului. Atributul de focalizare automată face exact ceea ce sună: de îndată ce pagina se încarcă, mută focalizarea în câmpul specificat. Dar, deoarece acesta este doar un marcaj și nu un script, comportamentul va fi consecvent pe toate site-urile. În plus, producătorii de browsere (sau autorii extensiilor) pot oferi utilizatorilor o modalitate de a dezactiva focalizarea automată.

Acesta este modul în care puteți seta un câmp de formular de focalizare automată.




Browserele care nu acceptă atributul de focalizare automată îl vor ignora.

Ce? Să presupunem că doriți ca focalizarea automată să funcționeze peste tot, nu doar în browserele HTML5 de lux? Puteți lăsa scriptul curent cu autofocus, doar faceți două mici modificări:

  • adăugați atributul de focalizare automată la codul dvs. HTML;
  • verificați dacă browserul acceptă atributul de focalizare automată și, dacă nu, rulați propriul script.

Focalizare automată cu alternativă





Concentrați-vă cât mai devreme posibil

Multe pagini web așteaptă ca window.onload să se declanșeze și să se concentreze. Dar evenimentul window.onload nu se va declanșa până când toate imaginile nu se vor încărca. Dacă pagina dvs. are o mulțime de imagini, astfel de scripturi naive se vor schimba potențial după ce utilizatorul a început să interacționeze cu o altă parte a paginii dvs. De aceea utilizatori experimentați urăsc scripturile de focalizare automată.

De exemplu, în secțiunea anterioară, scriptul de focalizare automată a fost plasat imediat după câmpul de formular la care se referă. aceasta soluție optimă dar vă poate jigni simțurile să puneți un bloc de cod JavaScript în mijlocul paginii (sau mai banal, sistemul dumneavoastră poate să nu fie atât de flexibil). Dacă nu puteți insera scriptul în mijlocul paginii, trebuie să setați focalizarea printr-un eveniment personalizat, cum ar fi $ (document) .ready () în jQuery în loc de window.onload.

Focalizare automată prin jQuery









Evenimentul personalizat jQuery se declanșează de îndată ce DOM-ul este disponibil - adică așteaptă să se încarce textul paginii, dar nu așteaptă să se încarce toate imaginile. Aceasta nu este cea mai bună abordare - dacă pagina este neobișnuit de mare sau conexiune retea lent, utilizatorul poate interacționa în continuare cu pagina înainte ca scriptul focalizat să fie executat. Cu toate acestea, este mult mai bine decât să așteptați ca evenimentul window.onload să aibă loc.

Dacă sunteți de acord și sunteți gata să inserați un script cu un operator în codul paginii dvs., acesta este un compromis care este mai puțin urât decât prima opțiune și mai bun decât a doua. Puteți folosi evenimente personalizate jQuery pentru a vă seta propriile evenimente, să spunem autofocus_ready. Apoi puteți declanșa acest eveniment manual, de îndată ce câmpul de focalizare automată este disponibil. Mulțumesc lui EM Shtenberg pentru că m-a învățat această tehnică.

Focalizare automată cu un eveniment personalizat alternativ










Această soluție este optimă, ca și prima abordare. Accentul va fi pus pe câmpul formular cât mai curând posibil din punct de vedere tehnic, în timp ce textul paginii se încarcă încă. O parte din logica aplicației (focalizarea în câmpul formularului) a fost mutată din corpul paginii în secțiune ... Acest exemplu se bazează pe jQuery, dar conceptul de evenimente personalizate nu este unic pentru jQuery. Alte biblioteci JavaScript precum YUI și Dojo oferă capabilități similare.

Să rezumam.

  • Setarea corectă a focalizării este importantă.
  • Dacă este posibil, cereți browserului să folosească atributul de focalizare automată pe câmpul în care doriți să vă focalizați.
  • Dacă utilizați cod alternativ pentru browsere mai vechi, definiți suportul pentru atributul de focalizare automată, astfel încât scriptul să ruleze numai pe browsere mai vechi.
  • Concentrați-vă cât mai devreme posibil. Introduceți scriptul de focalizare în cod imediat după câmpul formularului. Dacă acest lucru nu vă deranjează, încorporați o bibliotecă JavaScript care acceptă evenimente personalizate și apelați evenimentul în codul dvs. imediat după câmpul formularului. Dacă acest lucru nu este posibil, utilizați un eveniment precum $ (document) .ready () din jQuery.
  • Nu așteptați în niciun caz ca window.onload să seteze focalizarea.

Adrese de email

De peste un deceniu, formularele au conținut doar câteva tipuri de câmpuri. Cele mai comune sunt următoarele.

Toate aceste tipuri de câmpuri încă funcționează în HTML5. Dacă faceți „upgrade la HTML5” (eventual prin schimbarea! DOCTYPE), nu trebuie să faceți o singură modificare formularelor. Ura pentru compatibilitatea anterioară!

Cu toate acestea, HTML5 definește 13 noi tipuri de câmpuri și nu există niciun motiv pentru a nu începe să le utilizați.

Primul dintre aceste noi tipuri de adrese E-mail... Arata cam asa.





Eram pe cale să scriu o propoziție care începea „în browsere care nu acceptă tipul =" e-mail „...” dar s-a oprit. De ce? Pentru că nu sunt sigur dacă browserele nu acceptă type = „email”. Toate browserele „suport” tip = „e-mail”. S-ar putea să nu facă ceva special, dar browserele care nu recunosc tip = „e-mail” îl vor trata ca tip = „text” și îl vor afișa ca un câmp de text obișnuit.

Voi sublinia cât de important este acest lucru. Există milioane de formulare pe Internet care vă cer să introduceți o adresă de e-mail și toate folosesc ... Vedeți o casetă de text, introduceți adresa dvs. de e-mail în ea și gata. Și aici vine HTML5, care definește tipul = „email”. Înnebunesc browserele? Nu. Fiecare browser de pe Pământ tratează atributul tip necunoscut ca tip = „text” - chiar și IE6. Deci, puteți să vă „actualizați” formularele folosind tip = „e-mail” chiar acum.

Ce se întâmplă dacă, să zicem, browserul acceptă tipul = „e-mail”? Ei bine, asta ar putea însemna orice. Specificația HTML5 nu necesită nicio interfață de utilizator specifică pentru noile tipuri de câmpuri. Opera completează câmpul formularului cu o mică pictogramă. Alte browsere HTML5, cum ar fi Safari și Chrome, redă ca un câmp de text - la fel ca tip = "text" - astfel încât utilizatorii dvs. să nu observe diferența (până când nu se uită la sursa).

Și apoi este iPhone-ul.

iPhone nu are o tastatură fizică. Toată „tastarea” se face făcând clic pe tastatura de pe ecran care apare la momentul potrivit, de exemplu, când navigați la un câmp de formular pe o pagină web. Apple a făcut ceva complicat în browserul iPhone-ului. Recunoaște unele dintre noile câmpuri HTML5 și schimbă dinamic tastatura de pe ecran pentru a optimiza introducerea.

De exemplu, o adresă de e-mail este text, nu? Sigur, dar acesta este un tip special de text. De exemplu, aproape toate adresele de e-mail conțin simbolul @ și cel puțin un punct (.), dar este puțin probabil să conțină un spațiu. Deci, atunci când utilizați iPhone și mergeți la element , primești o tastatură pe ecran care conține mai puțin spațiu decât de obicei, precum și taste dedicate pentru caractere. și @.

Lasă-mă să rezum. Nu există niciun dezavantaj în a traduce imediat toate câmpurile dvs. din adrese de emailîn tip = „e-mail”. Aproape nimeni nu va observa acest lucru, cu excepția utilizatorilor de iPhone, care probabil nici nu o vor observa. Dar cei care observă vor zâmbi liniștiți și vă vor mulțumi că le-ați făcut treaba puțin mai ușoară.

Adrese web

O adresă web - pe care crampele standardelor au numit-o URL-uri, cu excepția câtorva pedanți care au numit URI-uri - este un alt tip de text specializat. Sintaxa unei adrese web este limitată de standardul de Internet relevant. Dacă cineva vă cere să introduceți o adresă web într-un formular, se așteaptă la ceva de genul „http://www.google.com/” și nu „125 Farwood Road”. Liniile oblice sunt comune – chiar și pentru pagina principala Google are trei dintre ele. Punctele sunt și ele comune, dar spațiile nu sunt permise. Și fiecare adresă web are un sufix de domeniu precum „.com” sau „.org”.

Și așa... (rulația de tobe, te rog)... ... Pe iPhone, arată așa.

iPhone-ul și-a schimbat tastatura virtuală așa cum a făcut-o pentru o adresă de e-mail, dar acum a optimizat-o pentru tastarea unei adrese web. Bara de spațiu este complet înlocuită de trei taste virtuale: bară oblică, punct și „.com” (puteți țineți apăsată tasta „.com” pentru a selecta un sufix diferit, cum ar fi „.org” sau „.net”).

Browserele care nu acceptă HTML5 vor trata tipul = „url” ca tip = „text”, așa că nu există niciun dezavantaj în utilizarea acestui tip pentru toate câmpurile în care trebuie să introduceți o adresă web.

Numerele ca contoare

Următorul pas: numerele. A cere un număr este mai complex decât a cere o adresă de e-mail sau web. În primul rând, cifrele sunt mai grele decât crezi. Alegeți rapid un număr. -1? Nu, mă refer la un număr între 1 și 10,7 ½? Nu, nu, nici o fracțiune, prostule. π? Acum tocmai ai ales un număr irațional.

Vreau să subliniez că nu vi se cere adesea „doar un număr”. Este mai probabil ca aceștia să ceară un număr într-un anumit interval. S-ar putea să doriți doar anumite tipuri de numere în acest interval - poate numere întregi, dar nu fracții sau zecimale, sau ceva mai exotic, cum ar fi multiplii de 10. HTML5 acoperă totul.

Alegeți un număr, aproape orice

min = "0"
max = "10"
pas = "2"
valoare = "6">

Să ne uităm la un atribut la un moment dat.

  • tip = „număr” înseamnă că acesta este un câmp numeric.
  • min = „0” indică valoarea minimă permisă pentru acest câmp.
  • max = „10” este valoarea maximă permisă.
  • pas = „2” combinat cu valoarea minima definește numere valide în intervalul: 0, 2, 4 și așa mai departe, până la valoarea maximă.
  • valoare = „6” valoare implicită. Ar trebui să pară familiar, același atribut este întotdeauna folosit pentru a defini valori pentru câmpurile de formular. Menționez acest lucru aici pentru un punct de plecare pe care se bazează HTML5 Versiunile anterioare HTML. Nu trebuie să reînveți să faci ceea ce ai făcut deja.

Acesta este un cod de câmp numeric. Rețineți că toate aceste atribute sunt opționale. Dacă aveți un minim, dar nu un maxim, puteți specifica atributul min, dar nu max. În mod implicit, valoarea pasului este 1 și puteți omite atributul step până când aveți nevoie de o valoare de pas diferită. Dacă nu există un implicit, atunci atributul value poate fi un șir gol sau chiar omis cu totul.

Dar HTML5 nu se oprește aici. Pentru acelasi mic preț scăzut libertate veți obține aceste metode JavaScript la îndemână.

  • input.stepUp (n) crește valoarea câmpului cu n.
  • input.stepDown (n) scade valoarea câmpului cu n.
  • input.valueAsNumber returnează valoarea curentă ca număr în virgulă mobilă (proprietatea input.value este întotdeauna un șir).

Probleme de afișare? Ei bine, interfața corectă pentru manipularea numerelor în browsere este implementată diferit. Pe iPhone, unde tastarea este dificilă, browserul optimizează din nou tastatura virtuală pentru introducerea numerelor.

Pe versiunea de desktop a Opera, câmpul tip = „număr” apare ca un contor cu săgeți mici în sus și în jos pe care puteți face clic pentru a schimba valori.

Opera respectă atributele min, max și step, astfel încât veți obține întotdeauna o valoare numerică acceptabilă. Dacă creșteți valoarea la maxim, săgeata sus din contor devine gri.

Ca și în cazul tuturor celorlalte câmpuri de introducere pe care le-am discutat în acest capitol, browserele care nu acceptă tip = „număr” îl vor trata ca tip = „text”. Valoarea implicită va apărea în câmp (din moment ce este stocată în atributul value), dar alte atribute precum min și max vor fi ignorate. Puteți să le implementați singur sau să utilizați un cadru JavaScript care implementează deja gestionarea contoarelor. Mai întâi verificați cum este aici.

dacă (! .inputtypes.number) (
// nu există suport încorporat pentru câmpul tip = număr
// poate încerca Dojo sau alt cadru JavaScript
}

Numere de glisare

Contorul nu este singura modalitate de a reprezenta introducerea numerelor. Probabil ați văzut și un glisor care arată așa.

Acum puteți avea și un glisor în formă. Codul arată ciudat ca o casetă de rotație.

min = "0"
max = "10"
pas = "2"
valoare = "6">

Toate atributele disponibile sunt la fel ca tip = „număr” - min, max, pas, valoare - și înseamnă același lucru. Singura diferență este interfața cu utilizatorul... În loc de un câmp de introducere, se așteaptă ca browserele să afișeze tipul = „interval” ca glisor. La momentul scrierii, cele mai recente versiuni de Safari, Chrome și Opera au funcționat cu acest lucru. Din păcate, iPhone-ul se afișează ca o simplă casetă de text, nici măcar nu își optimizează tastatura de pe ecran pentru introducerea numerelor. Toate celelalte browsere se gândesc doar la un câmp ca tip = „text”, așa că nu există niciun motiv pentru a începe să utilizați acest tip imediat.

HTML 4 nu include selectarea datei prin calendar. Cadrele JavaScript vă permit să ocoliți acest lucru (Dojo, jQuery UI, YUI, Closure Library), dar, desigur, fiecare dintre aceste soluții necesită un cadru „încorporat” pentru orice calendar încorporat.

HTML5 definește, în sfârșit, o modalitate de a activa selectorul de date inline fără niciun scripting. Există de fapt șase dintre ele: dată, lună, săptămână, oră, dată + oră și data + oră cu fusul orar.

Până acum, sprijinul este... rar.

Suport pentru selectorul de date
Tip de Operă Alte browsere
tip = "data" 9.0+ -
tip = "luna" 9.0+ -
tip = "saptamana" 9.0+ -
tip = "timp" 9.0+ -
tip = "datatime" 9.0+ -
tip = "datetime-local" 9.0+ -

Așa se afișează Opera :

Dacă aveți nevoie de o oră împreună cu o dată, Opera acceptă și :

Dacă aveți nevoie de o lună plus un an (de exemplu, data de expirare card de credit), Opera poate afișa :

Mai puțin obișnuită, dar accesibilă este alegerea unei săptămâni din an :

Nu în ultimul rând este momentul cu :

Selector de date cu alternativă




...

Este probabil ca alte browsere să accepte în cele din urmă aceste tipuri. La fel ca tip = „e-mail” și alte tipuri, aceste câmpuri de formular se vor afișa ca text simplu în browserele care nu recunosc tipul = „data” și variantele acestuia. Dacă doriți, puteți pur și simplu să utilizați decât să-i faci pe utilizatorii Opera fericiți și să aștepți ca alte browsere să ajungă din urmă. Este mai realist să-l folosești dar verificați dacă browserul are suport încorporat pentru selectorul de date și includeți o soluție alternativă de script la alegere (Dojo, jQuery UI, YUI, Closure Library sau alte opțiuni).

Caseta de căutare

Deci, caută. Nu doar căutări de pe Google sau Yahoo (ei bine, și acelea). Gândiți-vă la orice casetă de căutare, pe orice pagină, pe orice site. Amazon are o casetă de căutare, Yandex are o casetă de căutare și majoritatea blogurilor au și ele. Cum sunt făcute? ca orice altă casetă de text de pe net. Să reparăm asta.

În căutarea următoarei generații




În unele browsere, nu veți observa nicio diferență față de un câmp de text obișnuit. Dar dacă utilizați Safari pe Mac OS X, va arăta așa.

Ai găsit diferența? Câmpul de introducere are colțuri rotunjite! Știu, știu, cu greu vă puteți reține sentimentele. Dar stai, asta nu e tot! Când începeți să tastați în câmpul tip = „căutare”, Safari va insera un mic buton „x” cu partea dreapta fereastră. Făcând clic pe „x” se șterge conținutul câmpului. Google Chrome care are aceeași tehnologie sub capotă se comportă la fel. Ambele mici modificări arată și se comportă similar căutării native din iTunes și alte aplicații client Mac OS X.

Apple.com folosește pentru a căuta site-ul dvs. pentru a ajuta site-ul să transmită un sentiment macho. Dar nu există nimic specific pentru Mac aici. Este doar cod, astfel încât fiecare browser de pe orice platformă poate alege cum să se afișeze conform convențiilor platformei. Ca și în cazul tuturor celorlalte tipuri noi, browserele care nu recunosc tip = „căutare” îl vor trata ca tip = „text”, așa că nu există absolut niciun motiv să nu începeți să utilizați tip = „căutare” pentru toate casetele de căutare astăzi. . ..

spune profesorul Markup

În mod implicit, Safari nu se aplică majoritatea stilurilor. Dacă doriți ca Safari să trateze caseta de căutare ca o casetă de text obișnuită (pentru a vă putea aplica propriile stiluri), adăugați această regulă în foaia de stil.

intrare (
-webkit-aspect: textfield;
}

Îi mulțumesc lui John Lane că m-a învățat acest truc.

Alegerea culorilor

HTML5 definește, de asemenea, un câmp care vă permite să selectați o culoare și o returnează în notație hexazecimală. Niciun browser nu acceptă selectorul de culori, ceea ce este păcat pentru că întotdeauna mi-au plăcut paletele Mac OS. Poate intr-o zi.

Aproximativ. traducător. Opera 11 acceptă această caracteristică.

Validarea formularului

În acest capitol, am vorbit despre noi elemente de formular și despre noi funcții precum focalizarea automată, dar nu am menționat poate cea mai interesantă parte a formularelor HTML5: verificare automată date de intrare. Să aruncăm o privire la problemele comune ale introducerii unei adrese de e-mail într-un formular. Probabil aveți validare pe partea client prin JavaScript, urmată de validare pe partea server prin PHP, Python sau alt limbaj pe partea serverului. HTML5 nu poate înlocui niciodată validarea pe partea de server, dar poate înlocui într-o zi validarea pe partea client.

Există două mari probleme cu validarea e-mailului JavaScript:

  1. Unii dintre vizitatorii dvs. (probabil în jur de 10%) nu includ JavaScript.
  2. Veți primi adresa incorect.

Serios, ai greșit adresa. Determinarea dacă un set de caractere aleatorii este o adresă de e-mail validă este incredibil de dificilă. Cu cât te uiți mai greu, cu atât devine mai greu. Am menționat că acest lucru este foarte, foarte dificil? Nu ar fi mai ușor să agăți această durere de cap pe browser?

Opera verifică tipul = „e-mail”

Iată o captură de ecran din Opera 11, deși funcționalitatea este prezentă încă de la Opera 9. Codul implică setarea valorii de e-mail pentru atributul type. Când un utilizator Opera încearcă să trimită un formular cu , browserul verifică automat adresa de e-mail chiar dacă scripturile sunt dezactivate.

HTML5 oferă, de asemenea, validarea câmpurilor pentru adresele web si numere cu ... Validarea pentru numere ia în considerare valorile atributelor min și max, astfel încât browserele nu vă vor permite să trimiteți formularul dacă introduceți un număr prea mare.

Nu există niciun cod pentru a activa validarea formularelor HTML5, aceasta se face în mod implicit. Pentru a dezactiva validarea, utilizați atributul novalidate.

Nu mă testa




Browserele sunt lente în a activa suportul pentru validarea formularelor HTML5. Firefox 4 va avea suport complet. Din păcate, Safari și Chrome implementează doar parțial: validează elementele de formular, dar nu afișează niciun mesaj vizibil atunci când câmpurile de formular nu se validează. Cu alte cuvinte, dacă introduceți o dată incorectă (sau scrisă greșit) în tipul = „data”, Safari și Chrome nu vor trimite formularul, dar nu vă vor spune de ce nu au făcut-o. Vor seta focalizarea pe un câmp care conține o valoare nevalidă, dar nu va afișa un mesaj de eroare precum Opera sau Firefox 4.

Câmpuri obligatorii

A sustine
IE Firefox Safari Crom Operă iPhone Android
- 4.0+ - - 9.0+ - -

Validarea formularelor în HTML5 nu se limitează la tipul fiecărui câmp. De asemenea, puteți specifica că unele câmpuri sunt obligatorii, astfel de câmpuri trebuie să fie valide înainte de a putea trimite formularul.

Codul pentru câmpurile obligatorii este cât se poate de simplu.




Browserele pot schimba aspectul original al unui câmp obligatoriu. De exemplu, așa arată în Mozilla Firefox 4.0.

În plus, dacă încercați să trimiteți un formular fără a completa o valoare necesară, Firefox va afișa o bară de informații care vă va spune că câmpul este obligatoriu și nu poate fi gol.

Obiectul descris este un instrument foarte util și puternic. Acest obiect are mai multe metode, descrierea lor este dată mai jos:

Colecții:

Metode:

Proprietăți:

Răspuns la colectare. Cookie-uri

Colecția de cookie-uri stabilește valori pentru cookie-uri. Dacă cookie-urile specificate nu există, atunci le creează. Dacă cookie-ul există, acesta capătă o nouă valoare, iar cel vechi este distrus.

Răspuns.Cookie-uri (cookie) [(cheie) | ... atribute] = valoare

Opțiuni:

  • prăjitură- Nume cookie
  • cheie- Parametru optional. Dacă este specificat, atunci cookie-ul este o referință (imbricat) și cheia este un set de valori.
  • atribute- Informațiile specificate despre cookie-urile în sine. Acest parametru poate fi unul dintre următoarele:
  • sens- Indică valoarea de atribuit această cheie sau un atribut.
NumeDescriere
DomeniuScrie doar. Dacă este specificat, atunci cookie-urile sunt transmise numai la cerere din acest domeniu.
ExpirăScrie doar. Data expirării cookie-ului. Această dată trebuie setată pentru ca cookie-ul să fie scris clientului HDD dupa terminarea sedintei. Dacă acest atribut nu este setat, atunci data de expirare a cookie-urilor este acceptată data curenta... Cookie-urile vor expira imediat după încheierea sesiunii.
HasKeyDoar lectură. Indică dacă cookie-ul conține cheia dată.
caleScrie doar. Dacă este specificat, cookie-urile sunt transmise numai atunci când sunt solicitate din această cale. Dacă parametrul nu este setat, atunci este utilizată calea către aplicație.
SigurScrie doar. Indică dacă cookie-ul va fi protejat sau nu.

Cometariu:

Dacă cookie-ul cu cheie este creat așa cum se arată în următorul script,

<% Response.Cookies("mycookie")("type1") = "сахар" Response.Cookies("mycookie")("type2") = "печенье" %>

atunci va fi trimis următorul antet:

Set-Cookie: MYCOOKIE = TYPE1 = zahăr și TYPE2 = cookie

Dacă atribuiți o valoare mycookie fără a utiliza chei, atunci această acțiune va distruge cheile type1 și type2. De exemplu:<% Response.Cookies("myCookie") = "шоколадный зефир" %>

În exemplul anterior, cheile tip1 și tip2 vor fi distruse, iar valorile lor se vor pierde. Mycookie va conține acum semnificația bezelelor de ciocolată.

De asemenea, puteți verifica existența unei chei specifice în felul următor:

<% = Response.Cookies("myCookie").HasKeys %>

Dacă este afișat TRUE, atunci o astfel de cheie există, în cazul FALSE - nr.

Răspuns.Metoda de scriere

Răspuns.Scrieți variabilă_sau_valoare

Opțiuni:

  • variabilă_sau_valoare- Date de afișat pe ecranul browserului prin HTML. Acest parametru poate fi de orice tip acceptat de VisualBasic Scripting Edition. Adică datele pot fi de următoarele tipuri: dată, șir, simbol, valori numerice. Valoarea acestui parametru nu poate conține combinații de %>. Puteți utiliza în schimb combinația echivalentă% \>. Serverul web va converti această secvență în secvența necesară atunci când scriptul este executat.

Următorul exemplu arată cum funcționează metoda Response.write pentru a afișa un mesaj către client.

doar iti spun:<%Response.write "Привет всем!!!"%>Si numele tau<%Response.write(Request.Form("name"))%>

Următorul exemplu adaugă o etichetă HTML la o pagină web. Deoarece această metodă nu poate conține combinația%>, folosim secvența% \>. Deci un exemplu de script:

<% Response.write "

" %>

Ieșirea va fi linia:

Răspuns.Metoda de redirecționare

Response.Redirect URL (URL - Descriptor de resurse universale)

Opțiuni:

  • Url- Parametrul este un descriptor de resursă generic. Arată dacă browserul trebuie redirecționat.

Cometariu:

Orice intamplare aceasta metodaîntre etichete și pagina web va fi ignorată. Această metodă poate fi folosită numai în antetul unei pagini HTML. Această metodă va transmite antetul browserului dacă parametrul URL al acestui obiect este omis în următoarea formă:

HTTP / 1.0 302 Adresa URL a locației obiectului mutat

Răspuns.Metoda finală

Răspuns.Sfârşit

Cometariu:

Dacă proprietatea Response.Buffer a fost setată la TRUE, atunci apelarea metodei Response.End va șterge tamponul, împingând datele din acesta către client. Dacă nu doriți să afișați date utilizatorului, trebuie să apelați următoarea metodă:

<% Response.Clear Response.End %>

Metoda Response.AddHeader

Metoda AddHeader adaugă antet HTML cu anumite valori... Această metodă adaugă întotdeauna un nou antet la răspunsul browser-ului clientului. Această metodă nu înlocuiește titlul existent cu unul nou. Titlul adăugat nu poate fi eliminat.

Această metodă este utilizată numai pentru sarcini „avansate”.

Response.AddHeader nume_variabilă, valoare

Opțiuni:

  • nume_variabilă- Numele noilor parametri de antet HTML.
  • sens- Valoarea de setat, care va fi memorată în antet.

Note:

Pentru lucru corect metoda, nume_variabilă nu trebuie să conțină caracterul de subliniere (_). Colecția ServerVariables interpretează liniuța de subliniere ca o liniuță în titlu. De exemplu, următorul script forțează serverul să găsească un parametru din antetul HTML numit MY-HEADER.

<% Requset.ServerVariables("HTTP_MY_HEADER") %>

Deoarece protocolul HTTP necesită ca toți parametrii antetului să fie trecuți înainte de începutul corpului paginii HTML, trebuie să apelați metoda AddHeader în scriptul dumneavoastră înainte de a începe descrierea. ...... Există o excepție. Dacă proprietatea Buffer este setată la true, atunci puteți scrie AddHeader oriunde în script, dar înainte de primul apel la metoda Flush. În caz contrar, apelarea metodei AddHeader va genera o eroare.

Următoarele două fișiere .ASP demonstrează acest ultim punct.

<% Response.AddHeader "Внимание!", "Текст сообщения об ошибке"%> textul dvs. de pe pagină

În acest exemplu, pagina nu este tamponată. Scriptul funcționează, totuși, AddHeader este apelat înainte ca serverul să producă ieșire HTML către client.

<% Response.Buffer = true %> iata cateva informatii pe pagina ta...<%Response.AddHeader "Внимание!", "сообщение об ошибке"%> <%Response.Flush%> <%Response.Write("некий текст")%>

În cel de-al doilea exemplu, pagina este în buffer și, ca urmare, serverul nu returnează textul clientului până când scriptul în sine se termină sau este întâlnită metoda Flush. Puteți folosi această metodă pentru a trimite mai multe copii ale unui anumit parametru de antet cu valori diferite, ca și în cazul antetului WWW-Authenticate.

Metoda Response.AppendToLog

Metoda AppendToLog adaugă o linie la sfârșitul fișierului jurnal al serverului web. Puteți apela această metodă de câte ori doriți. De fiecare dată când metoda este apelată, linia specificată va fi scrisă în fișierul jurnal al serverului.

Valoarea Response.AppendToLog

Opțiuni:

  • sens- Textul care urmează să fie adăugat la fișierul de raport al serverului web. Acest șir nu poate conține caracterul virgulă (,). Mai mult, lungimea totală a rândului adăugat nu trebuie să depășească 80 de caractere.

Note:

Pentru a utiliza această caracteristică, aveți nevoie ca opțiunea de interogare URI să fie activată în panoul „Proprietăți avansate de înregistrare” pentru acest server web în IIS.

Metoda Response.BinaryWrite

Metoda BinaryWrite permite ca informațiile specificate să fie scrise în ieșirea HTTP curentă fără nicio conversie de caractere. Această metodă este utilă pentru afișarea informațiilor fără șir, cum ar fi datele binare cerute de o aplicație.

Răspuns. Date BinaryWrite

Opțiuni:

  • date- Date destinate ieșirii HTTP.

Dacă aveți un obiect care generează o matrice de octeți, puteți utiliza următorul apel la această metodă pentru a transmite acea matrice unei aplicații care rulează pe computerul client.

<% Set BinGen = Server.CreateObject(My.BinaryGenerator) Pict = BinGen.MakePicture Response.BinaryWrite Pict %>

Răspuns.Metoda clară

Metoda Clear șterge toate ieșirile HTML stocate în tampon. Cu toate acestea, această metodă nu șterge informațiile legate de antet din buffer. Puteți utiliza această metodă pentru a gestiona erorile. Cu toate acestea, executarea acestei metode va duce la o eroare dacă proprietatea Response.Buffer nu este adevărată.

Proprietatea Response.CacheControl

Această proprietate înlocuiește valoarea implicită. Când setați proprietatea la Public, serverul proxy poate stoca în cache ieșirea generată de ASP.

Response.CacheControl [= antet pentru controlul cache]

Opțiuni:

  • Antetul de control al memoriei cache- Acest parametru de control al antetului poate fi public sau privat.

Proprietatea Response.CharSet

Proprietatea CharSet vă permite să adăugați numele tabelului de coduri de caractere (de exemplu, WINDOWS-1251) la antetul HTML, șirul de tip conținut.

Response.CharSet nume_tabel_cod

Opțiuni:

  • nume_tabel_cod- Un șir care specifică tabelul de coduri pentru această pagină HTML. Numele acestui tabel de coduri va fi adăugat la antetul fișierului HTML sub parametrul „content-type”.

Pentru o pagină ASP care nu utilizează proprietatea Response.Charset, parametrul „content-type” din antet va fi după cum urmează:

Tip de conținut: text / html

Dacă fișierul ASP conține un comand

<%Response.Charset("Windows-1251")%>

atunci câmpul de tip conținut din titlu va arăta ca

Tip de conținut: text / html; set de caractere = Windows-1251

Cometariu:

Această funcție inserează orice linie în antet și nu o validează.

Dacă pagina conține mai multe etichete Response.Charset, atunci fiecare etichetă ulterioară va înlocui valoarea cu propria sa.

Proprietatea Response.ContentType

Proprietatea ContentType vă permite să specificați tipul (tipul) conținutului fișierului HTML. Dacă această proprietate nu este utilizată, implicit este text / html.

Response.ContentType [= tip_conținut]

Opțiuni:

  • Tip de conținut- Un șir care descrie tipul de conținut HTML. Acest șir este de obicei sub forma „tip/subtip”, unde tipul este categoria principală a conținutului și subtipul este tipul de conținut. A primi lista completa de tipuri acceptate - consultați documentația browserului dvs. sau specificația HHTP.

Următorul exemplu va ilustra setarea unui tip de conținut ca format de definiție de canal (canale push).

<% Response.ContentType = "application/x-cdf" %>

Al doilea exemplu demonstrează setarea unei proprietăți la cele mai cunoscute valori.

<% Response.ContentType = "text/HTML" %> <% Response.ContentType = "image/GIF" %> <% Response.ContentType = "image/JPEG" %>

Răspuns. Proprietatea expiră

Proprietatea Expires specifică durata de timp Pagina HTML stocat în cache de browser este considerat nevalidat (perioada de stocare). Dacă un utilizator solicită din browser o pagină stocată în cache care nu a expirat, browserul o returnează direct din memoria cache.

Răspuns.Expiră [= număr]

Opțiuni:

  • număr- Cantitatea de timp, în minute, înainte ca o pagină să fie considerată „expirată”. Setarea acestei valori la 0 face ca pagina dată să devină „expirată” imediat.

Cometariu:

Dacă această proprietate este setată de mai multe ori pe pagină, atunci se folosește cea mai mică valoare.

Response.ExpiresAbsolute Property

Proprietatea ExpiresAbsolute specifică ora și data după care pagina HTML stocată în cache din browser este considerată nevalidă (expirat). Dacă utilizatorul solicită din browser o pagină stocată în cache care nu a expirat, browserul o returnează direct din memoria cache. Dacă este specificată ora (și este specificată data), atunci „perioada de păstrare” a acestei pagini va expira la miezul nopții acelei zile. Dacă nu este specificată nici ora, nici data, atunci valoarea este atribuită în conformitate cu ziua și ora la care a fost rulat scriptul.

Response.ExpiresAbsolute [= [data] [ora]]

Opțiuni:

  • Data- Indică data de expirare a „perioadei de păstrare”. Formatul datei trebuie să fie în conformitate cu standardul RFC-1123.
  • timp- Indică ora la care expiră pagina. Această valoare este convertită în GMT (Greenwich Mean Time) înainte ca antetul să fie trimis clientului.

Cometariu:

Dacă această proprietate este definită de mai multe ori pe o pagină, atunci timpul de expirare a „perioadei de păstrare” se presupune a fi cel mai rapid dintre toate valorile specificate.

<% Response.ExpiresAbsolute = #May 31,1998 13:30:15# %>

Proprietatea Response.IsClientConnected

Această proprietate este o valoare numai pentru citire, ceea ce înseamnă că nu poate fi atribuită nicio valoare acestei proprietăți. Această proprietate indică dacă clientul este conectat sau nu deja conectat la server, așa cum este definit în ultimul răspuns.

Response.IsClientConnected ()

Cometariu:

Această proprietate vă permite să definiți când utilizatorul este conectat și când este deconectat de la server. De exemplu, durata perioadei de timp dintre momentul în care serverul a răspuns și momentul în care clientul a făcut cererea asigură că clientul este încă conectat și are sens să continue executarea scriptului.

<% "посмотрим, подключен ли пользователь If Not Response.IsClientConnected Then "получаем номер сессии и закрываем сессию Shutdownid = Session.SessionID "подготовка к закрытию сессии Shutdown(Shutdownid) End If %>

Proprietatea Response.Pics

Această proprietate vă permite să adăugați valoarea câmpului pics-label la antetul răspunsului.

Response.PICS (PICSLabel)

Opțiuni

  • PicsLabel- Un șir care este convertit în format PICS - o etichetă. Valoarea specificată în acest parametru este adăugată la antetul răspunsului din câmpul PICS.

Pentru un fișier ASP care include:

<% Response.PICS("(PICS-1.1 etichete pe „& chr (34) &” 1997.01.05T08: 15-0500 „până la” 1999.12.31T23: 59-0000 „evaluări (v 0 s 010 n 0))%>

Următorul titlu va fi generat

Etichetă PICS: (PICS-1.1 etichete pe „1997.01.05T08: 15-0500” până la „1999.12.31.T23: 59-0000” (v 0 s 0 1 0 n 0))

Cometariu:

Această proprietate vă permite să inserați orice linii în antet, indiferent de corectitudinea liniilor.

Dacă pagina conține multe etichete care conțin Response.PICS, atunci fiecare etichetă ulterioară va înlocui valoarea precedentului.

Proprietatea de răspuns.Stare

Această proprietate vă permite să specificați bara de stare returnată de server. Valorile de stare sunt definite în specificația HTTP.

Response.Status = state_description

Opțiuni

  • state_description- Un șir care conține un număr din trei cifre care indică codul de stare și, de asemenea, o scurtă descriere a acestui cod. De exemplu, 310 Move Permanently.

Următorul exemplu arată setarea unei stări:

<% Response.Status = "401 Unauthorized" %>

Cometariu:

Utilizați această proprietate pentru a modifica șirul returnat de server.

Acest articol oferă un rezumat al răspunsurilor pe care o organizație sau un proiect le poate lua pentru a gestiona un risc. Riscul poate fi definit ca incertitudinea rezultatului, indiferent dacă este pozitiv (o oportunitate) sau negativ (o amenințare). Managementul riscului este esențial pentru succesul proiectului și este sarcina managementului riscului să gestioneze expunerea unui proiect la risc ().

Răspunsul (răspunsurile) la un anumit risc ar trebui să reflecte tipul de risc, evaluarea riscului (probabilitate, impact, criticitate) și atitudinea organizației față de risc. Există o serie de răspunsuri posibile la riscuri și, deoarece riscurile pot fi amenințări sau oportunități, acestea includ răspunsuri care sunt potrivite pentru oportunitățile potențiale. Răspunsurile sunt rezumate în tabelul de mai jos.

Tabelul răspunsurilor la risc

Răspuns la risc Descriere/exemplu

Potrivit pentru…. tipuri de risc (acestea sunt sugestii și nu sunt exhaustive)

Amenințări
Evita

Riscul este evitat prin schimbarea proiectului într-un fel pentru a evita riscul.

Unele riscuri politice de ex. opinia publică adversă. Unele riscuri tehnice/operaționale/de infrastructură, de ex. probleme de întreținere. Riscuri legale și de reglementare, de ex. controale de reglementare, cerințe de licențiere.

Transfer

Unele riscuri strategice/comerciale de ex. împotriva furtului, insolvența poate fi asigurată. Consultați riscurile de afaceri pentru mai multe exemple.

Reduce

Se iau măsuri pentru a reduce fie probabilitatea apariției riscului, fie impactul pe care acesta îl va avea.

Cel mai des utilizat răspuns la risc.

Aplicabil pe scară largă - Tehnic / Operațional / Infrastructură de ex. neglijență, eșec de performanță, sferă de aplicare, așteptări neclare.

Factori organizaționali / de management / umani de ex. ciocniri de personalitate, conducere slabă și selecție slabă a personalului.

Este posibil ca unele riscuri politice, juridice și de reglementare și economice/financiare să fie acceptate, de ex. război și dezordine, fluctuația cursului de schimb.

Contingenta Aici este pus în aplicare un plan pentru a răspunde dacă riscul este realizat.

Economic / financiar / de piata
Politic
Legal și de reglementare

Probabil că toate riscurile pot și ar trebui să aibă un plan de urgență.

Oportunități
Acțiune O oportunitate este împărtășită cu un partener sau furnizor de a maximiza beneficiile prin utilizarea resurselor/tehnologiilor partajate etc. Tehnic / operațional / infrastructură de ex. tehnologie nouă, design îmbunătățit.
Exploata Un proiect ar putea fi ajustat pentru a profita de o schimbare a tehnologiei sau de o nouă piață. Economic / financiar / de piata de ex. piețe noi și emergente, modificări pozitive ale ratelor de schimb sau ale ratelor dobânzii.
Spori Se iau măsuri pentru a crește probabilitatea apariției oportunității sau impactul pozitiv pe care l-ar putea avea. Oportunități strategice / comerciale precum noi parteneriate, noi investiții de capital, noi promotori.
Respinge Aici nu se ia nicio măsură și șansa de a câștiga din oportunitate este respinsă. poate fi pusă în aplicare în cazul în care se ivește ocazia. Politice sau de mediu de ex. noi legături de transport, schimbarea guvernului care aduce schimbări pozitive în politică / oportunități de lobby etc.

Planuri de contingență ar trebui să identifice acțiunile care vor fi întreprinse dacă apare un risc. Acțiunile contingente vor avea adesea un cost asociat și un buget ar trebui alocat în cazul de afaceri pentru a acoperi acest lucru.

Primele 50 de riscuri de afaceri și cum să le gestionați!

20 Riscuri comune ale proiectelor - exemplu Registrul de riscuri

Lista de verificare a 30 de riscuri de construcție

Răspunsuri la risc - referințe

Office of Government Commerce (2002), Managing Successful Projects with PRINCE2, Londra: TSO.

The Projects Group PLC, 2006, Privire de ansamblu asupra managementului riscului, Sutton: The Projects Group plc.