Luokan sivu. Web-sovellusten yksinkertaistettu lokalisointi. Käytä sivupohjan ominaisuuksia

Luultavasti harvinainen haastattelu ASP.NET:ssä ei ole täydellinen ilman kysymystä sivun elinkaaresta ASP.NET Web Formsissa (jäljempänä lyhennettynä ASP.NET). Yritetään ymmärtää tämä ongelma. Jaoin aiheen kahteen osaan. Tässä artikkelissa analysoimme vaiheita elinkaaren aikana sivuja ASP.NETissä.

ASP.NET-sivun yleissuunnitelman elinkaari
  • IIS-verkkopalvelimen sivupyynnön vastaanottaminen ja käsittely
  • pyynnön välittäminen edelleen ASP.NET-ajonaikaiseen
  • suoritusaika:

    * lataa kutsutun sivun luokan * asettaa sivuluokan ominaisuudet * rakentaa elementtien puun * täyttää Request and Response -ominaisuudet * kutsuu ```IHttpHandler.ProcessRequest```-metodia

Vaiheet

Päävaiheita on 8. Tämä näkyy selvästi seuraavassa kaaviossa

Vaiheen kuvaus
Pyyntösivu Sivupyyntö tapahtuu ennen kuin sivun elinkaari alkaa. Käyttäjä tekee pyynnön, ja ASP.NET-ajoaika määrittää, tuleeko sivu kääntää ja aloittaa sen elinkaari vai voiko se palvella välimuistissa olevan sivun vastauksena suorittamatta sivua.
Aloita käsittely Tässä vaiheessa Response and Request -ominaisuudet ja UICulture-ominaisuus asetetaan. Tämä vaihe määrittää myös, pyydettiinkö sivua takaisinlähetyksen seurauksena, ja asettaa IsPostBack-ominaisuuden vastaavasti.
Sivun alustus Kun sivu on alustettu, kaikki lapsikäyttäjät säätimet on jo luotu ja niille on asetettu UniqueID-ominaisuus. Tällä hetkellä teemoja käytetään sivulla. Jos sivu kutsutaan takaisinlähetyksen seurauksena, palvelimelle lähetettyä dataa ei ole vielä ladattu ohjausobjektien ominaisuuksiin tässä vaiheessa.
Jos sivu kutsutaan takaisinlähetyksen seurauksena, niin tässä vaiheessa säätimien ominaisuudet asetetaan tilatietojen perusteella (ViewState ja ControlState).
Validointi Validate()-menetelmää kutsutaan kaikille sivun validoijille.
Jälkikäsittely Tapahtumakäsittelijät kutsutaan, jos takaisinlähetys on tapahtunut.
Renderöinti Tilatiedot tallennetaan, sitten sivuluokka kutsuu sopivat menetelmät lapsielementtejä ohjaimia luodaksesi HTML-esityksen ja välittääksesi sen Response.OutputStreamiin.
Purkaminen Purkaminen tapahtuu sen jälkeen, kun koko sivun HTML-esitys on luotu.
Gaidar Magdanurov
Esittelyssä ASP.NET 2.0 Johdanto

Aina kun kehität projektin ja luot verkkosovelluksen, käytät eri keinoin Voit luoda sovellusarkkitehtuurin, muokata koodia ja julkaista työsi tulokset Web-palvelimella. Samanaikaisesti loppukäyttäjälle monimutkainen verkkosovellus jää joukoksi HTML-sivuja, joilla jokaisella on oma yksilöllinen URL-osoite. Yleisesti ottaen käyttäjä ei välitä millä alustalla tai tekniikalla sovellus luodaan. Käyttäjällä on tavoite, jonka hän haluaa saavuttaa universaali lääke, lähes kaikki hänen käyttämänsä verkkoselaimet. Tämä on Internet-sovellusten valtava etu verrattuna sovelluksiin työpöytäjärjestelmät– yleisesti hyväksytyn "viestintäkielen" HTML-koodin olemassaolo. Web-sovelluksen käyttöönottoa varten riittää, että se asennetaan palvelimelle, minkä jälkeen sovellusta voi käyttää mikä tahansa asiakas, jolla on Web-selain asennettuna. Valitettavasti tässä on myös ilmeinen ongelma HTML-käsittely koodia eri valmistajien selaimista.
Kehittäjän tehtävänä on luoda sovellus, joka luo HTML-koodia, joka on optimaalinen useimmille loppukäyttäjän käyttämille selaimille. Jokainen Web-sovelluksen luomiseen käytetty tekniikka mahdollistaa HTML-koodin luomisen, joten viime kädessä verkkosovelluksen luomiseen käytettävän tekniikan valinta riippuu vain kehityksen mukavuudesta ja nopeudesta sekä lopputuotteen käyttöönoton ja tuen helppoudesta.
ASP.NET-tekniikan etuna muihin verrattuna on päälle rakennettu korkea abstraktioaste tavallinen HTML koodi: olio-paradigman käyttö, useiden ohjelmointikielien tuki, tuhansia projekteihin valmiita ratkaisuja sisältävän yleisen perustan olemassaolo - Microsoft .NET Framework.
Lisäksi sovelluksen kehittämiseen voidaan käyttää mitä tahansa kehitysympäristöä tai jopa tekstieditoria, jonka avulla voit luoda, muokata ja tallentaa tekstitiedostoja. Jos kehittäjä haluaa hyödyntää Microsoftin täyden tehon. NET Framework ja ASP.NET ja samalla mahdollisimman vähän vaivaa, hänen on käytettävä tehtäviinsä sopivaa kehitysympäristöä. Yksi eniten tehokkaita keinoja ASP.NET-verkkosovellusten luominen on Microsoft Visual Studio. ASP.NET 2.0 -tuki sisältyy Visual Studio 2005:een.
Tässä artikkelissa esitellään lyhyesti useimmat ASP.NET 2.0:n, ASP.NET-kehyksen uuden version, uusista ominaisuuksista.

Edelleen tekstissä oletetaan, että lukija tuntee ASP.NET 1.0- tai ASP.NET 1.1 -tekniikan. Jos tarkasteltava aihe ylittää artikkelin soveltamisalan, hyperlinkki artikkeliin, joka sisältää yksityiskohtaisia ​​tietoja, sijaitsee suoraan tekstissä. Artikkelin lopussa on myös luettelo viittauksista siinä järjestyksessä, jossa tämän artikkelin tiedot esitetään.

Useiden ohjelmointikielien käyttö Microsoft .NET Framework ja Visual Studio 2005 tukevat useita ohjelmointikieliä, kuten Visual Basic, Visual C#, Visual C++, Visual J#. Koska nämä kielet käyttävät yhteistä CLR:ää (Common Language Runtime) ja noudattavat niitä yhteiset standardit
CLS (Common Language Specification), jolloin jollakin .NET-kielellä luotua kokoonpanoa voidaan käyttää toisella ohjelmointikielellä kehitetyssä projektissa, aivan kuin tämä kokoonpano ja sovellus olisi kirjoitettu samalla kielellä. Microsoft .NET Framework 2.0:n julkaisun myötä sen käyttö tuli mahdolliseksi samassa projektissa eri kieliä


ohjelmointi. Se, että ASP.NET-verkkosovellus voidaan kirjoittaa useilla ohjelmointikielillä, on erittäin kätevää, jos jollakin kielellä on jo todistettuja ratkaisuja ja projekti on kirjoitettu toisella kielellä tai jos tiimissä on kehittäjiä, jotka käyttävät eri kieliä ohjelmointikielet. Voit lukea eri kielten käyttämisestä yhdessä projektissa tästä artikkelista.

Koodinjakotekniikka
Verkkosovelluksen kaiken ydin on sivu. Käyttäjä siirtyy selaimen avulla sivujen välillä, palaa ajoittain aiemmin katsotuille sivuille, syöttää tietoja HTML-lomakkeisiin ja saa jonkin tuloksen. ASP.NET:ssä sivu on useimmiten verkkolomake, joka sisältää erilaisia ​​ohjausobjekteja, jotka vastaavat käyttäjän luomiin tapahtumiin. ASP.NET 1.x mahdollistaa logiikkakoodin erottamisen esityskoodista, eli sivuohjelman logiikkakoodin sijoittamisen .cs- tai .vb-tiedostoon, erilleen itse sivukoodista, joka on sijoitettu .aspx-tiedostoon. Tätä tekniikkaa kutsutaan Code-Behindiksi. Siten sivun ulkoasua voidaan muuttaa sivukoodiin vaikuttamatta, mikä mahdollistaa vastuun jakamisen

Mutta muokkauksen tukemiseksi Microsoftin avulla Visual Studio .NET ASP.NET-sivulla on määritettävä tätä sivua vastaava luokka ja tiedosto, jossa tämän luokan koodi sijaitsee. Tätä varten sivudirektiivi muunnetaan käyttämällä Codebenind- ja Inherits-avainsanoja.

ASP.NET 2.0 käyttää erilaista koodin erottelumekanismia. Sivudirektiivissä sinun on käytettävä muita avainsanoja: CodeFile ja Herits.

Tässä tapauksessa sivuohjelman logiikkaluokan koodi sijoitetaan CodeFile-attribuutissa määritettyyn tiedostoon. On huomattava, että Visual Studio 2005 käyttää osittaisia ​​luokkia.

Julkinen osaluokka Oletus: System.Web.UI.Page ( suojattu void Page_Load(objektin lähettäjä, EventArgs e) ( ) )

Siksi kehittäjä voi sijoittaa luokan koodin useisiin tiedostoihin, mutta tällainen koodin hajaantuminen tekee sovelluksesta erittäin tilaa vievän ja vaikean ylläpitää ja kehittää.
Visual Studio 2003:ssa käytetyssä Code-Behind-mallissa on useita erittäin merkittäviä puutteita. Ensinnäkin Visual Studion avulla kehittäjän on käännettävä projekti ennen julkaisua, koska ASP.NET kääntää sivut vain, jos Src-attribuutti on määritetty, jota Visual Studio ei käytä. Lisäksi, koska ASP.NET-ympäristö havaitsee muutoksen kokoonpanon luontipäivämäärässä, jokaisen bin-hakemistossa olevan vanhan kokoonpanon vaihdon jälkeen sovellusalue käynnistetään uudelleen, mikä johtaa tilapäiseen "hidastumiseen" sovelluksessa.
Visual Studio 2005 käyttää uutta avainsanoja, jota tukee ASP.NET 2.0 runtime, ja runtime puolestaan ​​käyttää uutta tekniikkaa sivujen kokoaminen. Tämän avulla voit ratkaista ongelman, joka liittyy kokoonpanon vaihtamiseen uudempaan.
Tästä huolimatta Visual Studio 2005 sallii edelleen siirtyä pois koodin jakamisesta ja sijoittaa ohjelman logiikkakoodi itse sivutiedostoon ja käyttää . Lisäksi oletusarvoisesti Visual Studio luo sivuja ilman koodin jakamista.

Sivujen kokoaminen tilauksesta

Verrataan ASP.NET 2.0:n ja ASP.NET 1.0:n suorittamia toimintoja, kun käyttäjä pyytää tiedostoa, jonka tunniste on .aspx. ASP.NET 1.x:ssä ajonaika jäsentää direktiivin Sivun sivut, etsii vastaavaa luokkaa sovelluskokoonpanosta, sitten sivukoodin perusteella luodaan luokka, joka on johdettu sivuohjelman logiikkaluokasta. Jos kokoonpano puuttuu, etsitään Page-direktiivin Src-attribuutissa määritettyä ohjelman logiikkatiedostoa. Jos tiedosto löytyy, kokoonpano käännetään, jos ei, ASP.NET tekee poikkeuksen.
ASP.NET 2.0:ssa ajonaika jäsentää myös sivun komentoja, etsii sivun logiikkaluokkaa vastaavan kokoonpanon ja luo sitten sivuluokan. Toisin kuin ASP.NET 1.x, sivuluokan pääluokka on System.Web.UI.Page, koska luotava dynaaminen luokka on itse sivuluokka (käyttämällä osittaisia ​​luokkia sivuluokalle ja sovelluslogiikkaluokalle) , eikä sovellusluokan logiikan jälkeläinen. Siksi, jos ASP.NET 1.x:ssä Web-lomakeluokkaa voitaisiin kutsua samaksi kuin itse Web-lomaketta.

... public class frmDefault: System.Web.UI.Page ( suojattu void Page_Load(objektin lähettäjä, EventArgs e) ( ) )

ASP.NET 2.0:ssa tämä ei ole sallittua, koska System.Web.UI.Form-ohjausobjekti on luokan jäsen.
ASP.NETin tärkein etu on, että jos sivun suorittamiseen ei vaadita kokoonpanoa, vain sivun logiikkatiedosto käännetään ilman koko kokoonpanon uudelleenkääntämistä. Koska käännös on dynaaminen, on tarpeen tarjota mahdollisuus luoda koodi, joka on yhteinen kaikille sovelluksen sivuille. Tätä tarkoitusta varten ASP.NET 2.0:ssa on erityisiä hakemistoja, jotka ovat sovelluksen juurihakemiston alihakemistoja, joista yksi on App_Code, joita käytetään tallentamaan tiedostoja, jotka sisältävät yleinen koodi
kaikille sivuille. Kun dynaaminen käännös suoritetaan, App_Code-hakemiston koodi käännetään ja asetetaan kaikkien Web-sovelluksen sivujen saataville. Samaan aikaan Visual Studio 2005 tukee App_Code-hakemistossa olevaa koodia, joten syntaksin korostus ja IntelliSense toimivat.

Jos projekti on käännettävä etukäteen, ennen sen käyttöönottoa palvelimella ASP.NET 2.0:ssa, on mahdollista esikääntää Web-sovellus kokonaan tai osittain. Voit lukea lisää esikäännöksestä tästä artikkelista.

Muutoksia Visual Studio -projektirakenteeseen

Visual Studio 2005 ei enää sisällä .csproj- tai .vbproj-tiedostoja, jotka on luotu aiemmin kullekin ASP.NET-projektityypille. Projektitiedostojen sijaan Visual Studio käyttää hakemistorakennetta, joten jos haluat sisällyttää olemassa olevan tiedoston projektiin, kopioi se projektihakemistoon.

On huomattava, että jos tiedosto tai hakemisto poistetaan projektitiedostopuusta Solution Explorer -ikkunassa, tiedosto tai hakemisto poistetaan fyysisesti tiedostojärjestelmästä.

ASP.NET 2.0 -sivu @Page -direktiivi

Uusien ominaisuuksien tuomiseksi ASP.NET 2.0:aan jouduttiin tekemään muutoksia ja lisäyksiä Page-luokkaan. Koska Page-direktiivin attribuutteja käytetään sivun ominaisuuksien asettamiseen suunnittelun aikana, tässä käsitellään uusia attribuutteja, jotka ovat ilmestyneet toteuttamaan personointimekanismeja, suunnittelumalleja, asettelua ja sivujen asynkronista toimintaa. Lisätietoa uusien attribuuttien määrittämisestä löytyy artikkelin osiosta, joka käsittelee Page-luokan uusia ominaisuuksia ja menetelmiä.

Asynk

Ilmaisee, mitkä IHttpHandler- tai IHttpAsyncHandler-liitännät sivuluokan toteuttavat.

Kun tämä attribuutti on asetettu arvoon tosi, dynaamisesti luotu sivuluokka toteuttaa IHttpAsyncHandlerin, muuten luokka toteuttaa IHttpHandlerin. Jos sivuluokka toteuttaa IHttpAsyncHandleria, sivukoodi voidaan suorittaa asynkronisesti, kunnes PreRender-sivun elinkaaressa tapahtuu uusi tapahtuma, jolloin HTML-koodi synkronoidaan ja valmistetaan lähetettäväksi asiakasselaimelle.

AsyncTimeOut

Voit asettaa aikarajan asynkronisten toimintojen suorittamiselle. Oletuksena tämä asetus on 45 sekuntia.

Kulttuuri

Asettaa sivulla käytettävän kulttuurijoukon.

Ota Theming käyttöön

Voit ottaa teematuen käyttöön tai poistaa sen käytöstä. Oletuksena käytössä.

MasterPageFile

Määrittää polun malliin, jota käytetään tämän sivun koodin luomiseen. Tyylisivuteema suunnittelu (Theme-attribuutissa tai web.confg-tiedostossa). Tällä tavalla voit asettaa yleisen teeman koko sivustolle ja käyttää StyleSheetTheme-attribuuttia tehdäksesi joitain muutoksia sivun yleiseen ulkoasuun ja/tai joihinkin sivun ohjaimiin.

Teema

Määrittää teeman nimen, jota käytetään tämän sivun koodin tyyliin.

UI Kulttuuri

Asettaa käytettävän kulttuurijoukon (Culture). käyttöliittymä sivuja.

Sivun elinkaari

ASP.NET-sivun elinkaari alkaa siitä, että IIS-verkkopalvelin vastaanottaa ja käsittelee kyseistä sivua koskevan pyynnön ja välittää pyynnön ASP.NET-ajonaikaiselle. Kun pyyntö vastaanotetaan, ajonaika lataa kutsuttavan sivun luokan, asettaa sivuluokan ominaisuudet, rakentaa elementtien puun, täyttää Request- ja Response-ominaisuudet ja kutsuu IHttpHandler.ProcessRequest-metodin. Runtime tarkistaa sitten miten sivua kutsuttiin ja jos sivua kutsuttiin välittämällä tietoja toiselta sivulta, mistä keskustellaan myöhemmin, suoritusaika määrittää PreviousPage-ominaisuuden.
On myös syytä huomata, että alla käsiteltyjen sivun suoritusvaiheiden lisäksi on myös sovellustason vaiheita, jotka eivät ole sivukohtaisia. Yksityiskohdat sovelluksen suoritusvaiheista on kirjoitettu tässä artikkelissa.

Vaiheen kuvaus
Pyyntösivu Sivupyyntö tehdään sivun elinkaaren alussa. Kun käyttäjä tekee pyynnön, ASP.NET-ajonaika määrittää, tuleeko sivu kääntää ja aloittaa sen elinkaari vai voiko se palvella välimuistissa olevan sivun vastauksena, jolloin sivua ei suoriteta.
Elinkaaren alku Tässä vaiheessa Response and Request- ja UICulture-ominaisuudet asetetaan. Lisäksi tässä vaiheessa määritetään, pyydettiinkö tätä sivua takaisinlähetyksen (tietojen lähettäminen palvelimelle) seurauksena, ja IsPostBack-ominaisuus asetetaan vastaavasti.
Sivun alustus Kun sivu alustetaan, kaikki alakäyttäjän ohjausobjektit on jo luotu ja niille on asetettu UniqueID-ominaisuus. Samanaikaisesti teemoja sovelletaan sivulle. Jos sivu kutsutaan takaisinlähetyksen seurauksena, palvelimelle lähetettyä dataa ei ole tässä vaiheessa vielä ladattu ohjainten ominaisuuksiin.
Jos sivu kutsutaan takaisinlähetyksen seurauksena, niin tässä vaiheessa säätimien ominaisuudet asetetaan tilatietojen perusteella (ViewState ja ControlState).
Validointi Validate()-menetelmää kutsutaan kaikille sivun validoijille.
Jälkikäsittely Tapahtumakäsittelijöitä kutsutaan (edellyttäen, että takaisinlähetys on tapahtunut).
Renderöinti Tilatiedot tallennetaan, sitten sivuluokka kutsuu alatason ohjausobjektien sopivia menetelmiä luodakseen HTML-esityksen ja välittääkseen sen Response.OutputStreamille.
Purkaminen Purkaminen tapahtuu sen jälkeen, kun koko sivun HTML-esitys on luotu.

Elinkaarivaiheiden edetessä tapahtuu tapahtumia, jotka tilaamalla antavat kehittäjälle mahdollisuuden suorittaa oman koodinsa. On syytä mainita @Page-direktiivin AutoEventWireup-attribuutti: jos tämä attribuutti on tosi (oletusarvo), niin sivuluokan menetelmistä, joiden nimi on Page_EventName, tulee automaattisesti vastaavien sivun elinkaaritapahtumien käsittelijöitä.
Sivun elinkaaren ja tapahtumien järjestyksen jäljittämiseksi voit määrittää @Page-direktiivin Trace-attribuutin arvoksi true ja TraceMode-attribuutin arvoksi "SortByTime". Sitten Jäljitystiedot-osiossa löydät luettelon tapahtuneista tapahtumista (Viesti-sarake). Esimerkiksi:

JäljitystiedotKategoria Viesti ensimmäisiltä viimeisiltä
aspx.sivu Aloita PreInit
aspx.sivu Lopeta PreInit 0.0364973314167865 0.036497
aspx.sivu Aloita Init 0.0379050459346291 0.001408
aspx.sivu Lopeta Init 0.047693704143491 0.009789
aspx.sivu Aloita InitComplete 0.0477864508468221 0.000093
aspx.sivu Lopeta InitComplete 0.0481875670270608 0.000401
aspx.sivu Aloita esilataus 0.0489879732516718 0.000800
aspx.sivu Lopeta esilataus 0.0494462283607275 0.000458
aspx.sivu Aloita lataus 0.0494924892194238 0.000046
aspx.sivu Lopeta lataus 0.0553441897381414 0.005852
aspx.sivu Aloita LoadComplete 0.0554711043059809 0.000127
aspx.sivu Load LoadComplete 0.055942153615399 0.000471
aspx.sivu Aloita PreRender 0.0561455634022874 0.000203
aspx.sivu Lopeta esirenderointi 0.0618604874695332 0.005715
aspx.sivu Aloita PreRenderComplete 0.06269871008062 0.000838
aspx.sivu Lopeta PreRenderComplete 0.0633259746265858 0.000627
aspx.sivu Aloita SaveState 0.080360541216174 0.017035
aspx.sivu Lopeta SaveState 0.213795377788888 0.133435
aspx.sivu Aloita SaveStateComplete 0.213911298043872 0.000116
aspx.sivu Lopeta SaveStateComplete 0.214385763389788 0.000474
aspx.sivu Aloita renderöinti 0.214440078745078 0.000054
aspx.sivu Lopeta renderöinti 0.315044337228923 0.100604


Kaikista sivun elinkaaren tapahtumista kehittäjä voi tilata vain viisi, alatason hallintatapahtumien lisäksi. Nämä tapahtumat ovat: PreInit, Init, Load, PreRender, Unload.

Katsotaanpa näiden tapahtumien käyttövaihtoehtoja.
Tapahtuman käyttö

PreInit

On syytä huomata, että tässä vaiheessa, jos sivu kutsuttiin takaisinlähetyksen seurauksena, säätimien ominaisuuksia ei ole vielä asetettu. Jos kehittäjä asettaa ominaisuudet itsenäisesti tässä vaiheessa, seuraavassa asetettu arvo voivat muuttua.

Init Tässä vaiheessa kehittäjä voi lukea tai alustaa säätimien ominaisuudet.
Ladata Tässä vaiheessa kehittäjä voi lukea tai muuttaa säätimien ominaisuuksia.
Esirenderöi Viimeinen mahdollisuus tehdä muutoksia sivun ulkoasuun.
Purkaa Varattujen resurssien vapauttaminen (avoimien yhteyksien sulkeminen tietokantaan, tiedostojen sulkeminen jne.)

On tärkeää, että tässä vaiheessa sivun HTML-esitys on jo luotu ja muutosyritys (esimerkiksi kutsumalla Response.Write()-metodia) johtaa poikkeukseen.

Sivu-objektin uudet ominaisuudet ja menetelmät

Edellisessä osassa lueteltujen tapahtumien hallintaa ja tietojen saamiseksi niiden suorittamisen tuloksista ASP.NET 2.0:n Page-objektilla on seuraavat uudet menetelmät ja ominaisuudet. Yksityiskohtaiset tiedot Alla lueteltuja esineitä ja ominaisuuksia sekä niiden käyttöä käsitellään tarkemmin tämän artikkelin seuraavassa osassa.

Kulttuuri

Ominaisuus, jonka avulla voit poistaa sivun teemojen tuen käytöstä, jos teemaa ei haluta käyttää.

Hanki Validators

Menetelmä, joka palauttaa tälle sivulle kokoelman validaattoreita.

Otsikko

Viittaus HtmlHead-objektiin, jonka avulla voit hallita sivun HTML-osion sisältöä edellyttäen, että head-elementillä on runat="server"-attribuutti.

IsAsync

Ominaisuus, joka ilmaisee, kuinka sivua käsitellään - synkroninen tai asynkroninen.

IsCrossPagePostBack

Ominaisuus, jonka avulla voit määrittää, onko tämä sivu pyydetään vastauksena toiselta sivulta lähetettyihin tietoihin.

Ota Theming käyttöön

Ominaisuus, joka sisältää sivumallitiedoston nimen.

MaxPageStateFieldLength

Asennat enimmäiskoko yksi kenttä, joka tallentaa tilan tavuina. Jos tämän ominaisuuden arvo on pienempi kuin tallennettavien tilatietojen koko, luodaan useita piilotettuja kenttiä, joista jokaisessa ei ole enempää tietoa kuin MaxPageStateFieldLength-arvo. .

Sivusovitin

Ominaisuus palauttaa PageAdapter-objektin, joka ohjaa sivun HTML-esityksen luomista. Tietyn PageAdapterin määrittää suoritusaika Requets-asetusten mukaan. Jos PageAdapter on valittuna, sivun elinkaaritapahtumat korvataan PaeAdapter-tapahtumilla.

SetFocus

Menetelmä, jonka avulla voit määrittää korostuksen mille tahansa sivulla näkyvälle säätimelle.

StyleSheetTheme, teema

Katso yllä kuvauksen uusista @Page-direktiivin määritteistä.

TestDeviceFilter

Menetelmä, joka tarkistaa onko nykyinen selain argumentiksi määritettyä tyyppiä oleva selain.

Otsikko

Ominaisuus, jonka avulla voit saada ja muuttaa sivun otsikkoa.

Uusien ASP.NET 2.0 -sivuobjektien ClientScriptManager-objektin käyttäminen

ClientScriptManager tarjoaa menetelmiä komentosarjakoodin käsittelyyn, jota käytetään Web-sovelluksen asiakasosassa. Nyt kaikki menetelmät, joita käytettiin ASP.NET 1.x:ssä asiakaskomentosarjojen tai piilotettujen kenttien rekisteröintiin, kuuluvat ClientScriptManager-luokkaan. Joskus on esimerkiksi tarpeen rekisteröidä asiakaskomentosarja dynaamisesti, riippuen joistakin parametreista. Esimerkiksi kun lataat keskustelupalstan sivua uudelleen, sinun on ilmoitettava käyttäjälle, että hän on saanut uuden henkilökohtaisen viestin. Tämä voidaan tehdä seuraavan esimerkin mukaisesti.

Suojattu void Page_Load(objektin lähettäjä, EventArgs e) ( if (CheckMail()) ( string startupScript = "" + "if(confirm("Olet saanut uuden viestin. Lue?"))" + "window.navigate(" /ReadMail .aspx");" + ""; ClientScript.RegisterStartupScript(this.GetType(), "MailAlertScript", startupScript))

HtmlHead-objekti

Jokaiselle ASP.NET-sivulle, jonka HTML-koodissa on tunniste, luodaan automaattisesti HtmlHead-objektin esiintymä, jonka avulla voit hallita sivun otsikko, lisää META-tunnisteita ja linkkejä peräkkäisiin tyylisivuihin.
Aikaisemmin ASP.NET 1.0 -sivun kehittäjän piti lisätä sivuluokkaan erityinen ominaisuus tai muuttuja tai keksiä jokin kiertotapa voidakseen hallita sivun otsikkoa ja metatietoja. Esimerkiksi kuten seuraavassa esimerkissä näkyy.

HtmlHead-objektin myötä tällaiset temput ovat menneisyyttä.

Page.Header.Title = "HtmlHead-testisivu"; Page.Header.Metadata.Add("Author", "Gaidar Magdanurov"); Page.Header.Metadata.Add("E-Mail", "!} [sähköposti suojattu]");

Lisäksi, kuten kaikki elementit, jotka voivat sisältää sisäkkäisiä elementtejä, HtmlHead mahdollistaa mielivaltaisten elementtien lisäämisen.

((Control)Page.Header).Controls.Add(new LiteralControl (""));

Sivun ohjaus Säätimen korostuksen asettaminen

Joskus on välttämätöntä, että sivun lataamisen jälkeen valinta asetetaan tietylle ohjauselementille (esimerkiksi hakulomakkeessa on loogista asettaa syötteen kohdistus päähakukenttään), tätä varten voit asettaa lomaketunnisteen oletusfocus-attribuutin arvo.

Valinta voidaan ohjata ohjelmallisesti kutsumalla SetFocus-metodia, joka välittää parametrina tämän elementin yksilöllisen tunnisteen:

Suojattu void Page_Load(objektin lähettäjä, TapahtumaArgs e) ( if(isPostBack) ( SetFocus("txtLastName"); ) else ( SetFocus("txtFirstText"); ) )


Tietojen päivittäminen lataamatta sivua uudelleen

ASP.NET 2.0:ssa oli mahdollista päivittää sivun tietoja lähettämättä sivua palvelimelle ja täydellinen päivitys. Tämä tuli mahdolliseksi takaisinsoittoa sisältävien asiakaskomentosarjojen (takaisinsoittokomentosarjat tai asiakkaan takaisinkutsut) ansiosta. Kun jokin tapahtuma laukaisee pyynnön palvelimelle, päivitetyt tiedot välitetään suoraan asiakaskomentosarjalle funktion argumentteina.
Tämä sivun tietojen päivitystapa on kätevä ja kannattava käyttää, kun kaikkien tietojen päivittäminen vaatii paljon resursseja ja tarpeeksi pitkään aikaan, kun taas tämä osa tiedoista päivitetään usein ja loput tiedot ovat staattisia. Tällöin tietojen, esimerkiksi yhden käyttäjäelementin, päivittämiseen kuluva aika, ottaen huomioon palvelimelle pyynnön, käsittelyn ja vastauksen vastaanottamisen aika, on huomattavasti lyhyempi kuin koko sivun päivitysaika.
Oletetaan, että on sivu, jolla on avattava luettelo. Kun käyttäjä valitsee arvon luettelosta, johonkin ohjausobjektiin ladataan arvo, joka liittyy loogisesti luettelosta valittuun arvoon. Tässä tapauksessa tehtävä on sellainen, että kaikkea dataa on mahdotonta tallentaa asiakaspuolelle (ehkä dataa on liikaa ja sivun siirtäminen verkon yli kestää kauan tai data syntyy palvelin ei vain riippuen käyttäjän valitsemasta avattavasta luetteloelementistä). ASP.NET 1.x:ssä tämän ongelman ratkaisemiseksi sinun on sitouduttava arvonmuutostapahtumaan avattavassa luettelossa palvelinmenetelmä. Tässä tapauksessa luettelon pitäisi aiheuttaa sivun lähettäminen palvelimelle aina, kun arvo muuttuu (AutoPostBack="True").

Suojattu void ddStatic_SelectedIndexChanged(objektin lähettäjä, EventArgs e) ( // ddStatic.Items.Value arvon perusteella // menetelmä asettaa muiden ohjausobjektien ominaisuudet)

Kuten edellä mainittiin, ASP.NET 2.0:ssa on mahdollista olla päivittämättä koko sivua. IN tässä tapauksessa On järkevää päivittää vain tarvitsemasi tiedot, koska koko sivun päivittäminen vain yhden arvon asettamiseksi on turhaa.
Jotta voidaan toteuttaa mekanismi tietojen päivittämiseksi lataamatta sivua uudelleen, on tarpeen luoda asiakkaan takaisinsoittotoiminto, joka hyväksyy palvelimelta välitetyt parametrit, palvelintoiminto, joka hyväksyy parametrit asiakkaalta ja palauttaa arvot asiakkaalle vastaanotettujen parametrien perusteella ja yhdistää nämä kaksi toimintoa. Lisäksi ASP.NET 2.0:n takaisinsoittomekanismin avulla voit palauttaa tuloksen asynkronisesti. Tätä varten ICallbackEventHandler-rajapinnassa on määritetty kaksi menetelmää: RaiseCallbackEvent parametrien vastaanottamiseksi palvelimella ja GetCallbackResult tuloksen palauttamiseksi asiakkaalle. Edellisen esimerkin toiminnallisuuden toteuttamiseksi seuraava koodi sijoitetaan ASPX-tiedostoon.

funktio UpdateText(tulos, konteksti) ( dSpan.innerText = tulos; )

Takaisinkutsutoimintoja käyttävän sivuluokan tulee toteuttaa ICallbackEventHandler-käyttöliittymä.

Julkinen osaluokka ScriptCallback_aspx: System.Web.UI.Page, System.Web.UI.ICallbackEventHandler ( )

Takaisinsoittoa tukevat funktion allekirjoitukset näyttävät tältä:

Julkinen virtuaalinen void PrepareCallbackEvent(string Arguments) julkinen virtuaalinen merkkijono RenderCallbackResult() yksityinen merkkijono EventArgument = ""; public void PrepareCallbackEvent(string eventArgument) ( EventArgument = eventArgument; ) public string RenderCallbackResult() ( return EventArgument; // arvo kirjoita merkkijono }

Viimeinen askel kohti tätä tavoitetta on linkittää palvelimen ja asiakkaan toiminnot.

Suojattu void Page_Load(objektin lähettäjä, EventArgs e) ( // luo viittaus takaisinsoittofunktion merkkijonoon callbackFunction = Page.ClientScript.GetCallbackEventReference (tämä, "document.all["ddDynamic"].value", "UpdateText", "null" " ); // Sido komentosarja avattavan valikon arvon muuttamisen tapahtumaan // luettelo ddDynamic.Attributes["onchange"] = String.Format("javascript:(0)", callbackFunction )

ClientScriptManager-objektin GetCallbackEventReference-metodi ottaa parametreiksi viittauksen sivuobjektiin, merkkijonon, joka ilmaisee takaisinkutsussa palvelimelle välitettävän arvon, asiakaspuolen menetelmän nimen ja vastauksen vastaanottavan palvelimen. Yksityiskohtainen kuvaus löytyy MSDN-dokumentaatiosta tai käyttämällä Visual Studio -työkalua - Object Browser.
Tämän tekniikan avulla voit luoda monimutkaisia ​​menetelmiä sivutietojen päivittämiseen, jotka voivat tuottaa merkittäviä suorituskykyetuja, kun ymmärrät koodin, jonka ASP.NET-ajoympäristö luo tämän toiminnon toteuttamiseksi.

// Luettelo, joka saa sivun latautumaan uudelleen // Luettelo, joka kutsuu menetelmän takaisinkutsulla

Tavallinen doPostBack-toiminto on hyvin yksinkertainen ja sen avulla voidaan tallentaa tapahtumatiedot piilotettuihin lomakekenttiin.

Var theForm = document.forms["frmCallBack"]; funktio __doPostBack(tapahtumakohde, tapahtumaargumentti) ( if (theForm.onsubmit == null || theForm.onsubmit()) ( theForm.__EVENTTARGET.value = eventTarget; theForm.__TAPAHTUMAARGUMENTTI.arvo = tapahtumaargumentti; theForm.submit)( );

Käytettäessä toimintoja takaisinsoittojen kanssa, mekanismi on paljon monimutkaisempi. WebForm_DoCallback-funktiokoodi on paljon suurempi kuin doPostBack, koska tämä toiminto määrittää selainobjektimallin tyypin ja lataa sitten tarvittavan moduulin tiedon siirtämiseen siitä.
Esimerkiksi selaimessa, joka tukee DOM:ta, tämä on Microsoft.XMLHTTP. Voit tarkastella ASP.NET 2.0 -kehyksen käyttämien asiakastoimintojen koodia tallentamalla takaisinsoittotoimintoja tukevan sivun kiintolevyllesi ja avaamalla sen tekstieditori
WebResource.axd-tiedosto, johon on linkki HTML-sivulla.

Tarkempi kuvaus asiakkaan takaisinsoittotoimintojen ominaisuuksista ja laajuudesta on kuvattu Dino Espositon artikkelissa.

Lomaketietojen lähettäminen toiselle ASP.NET-sivulle Palvelinpuolen lomakkeiden merkittävä rajoitus ASP.NET 1.0:ssa on kyvyttömyys siirtää lomakkeeseen syötettyä tietoa suoraan toiselle sivulle. Lomakeelementtien arvojen lähettäminen toiselle sivulle sinun on käytettävä yksinkertainen HTML
-lomakkeella ja määritä action-attribuutissa polku sivulle, jolle tiedot tulee vastaanottaa.



Tämä menettää palvelinpuolen lomakkeiden käytön edut.
Tämän ominaisuuden toteuttamiseksi ASP.NET 2.0 tarkistaa ASPX-sivuilta säätimiä, joissa on määritetty PostBackUrl-attribuutti, ja luo sivulle ylimääräisen piilotetun kentän __PREVIOUSPAGE, joka sisältää tietoja lomakeelementtien tilasta. Nämä tiedot ovat vastaanottajasivun saatavilla PreviousPage-ominaisuuden kautta.

Void Page_Load(objektin lähettäjä, TapahtumaArgs e) ( if (Edellinen sivu != null) ( // Hae lähetetyn lomakkeen objektit TextBox txtFirstName = (TextBox)PreviousPage.FindControl("txtFirstName"); TextBox txtLastPage. FindControl(" txtLastName"); // Käytä tietoja txtInfo.Text = "Hyvää päivää, " + txtFirstName.Text + "!" ) )

HTML-kooditasolla tietojen lähettäminen toiseen lomakkeeseen näyttää tältä.

Tästä voidaan päätellä, että lomaketietoja ei lähetetä suoraan selaimesta CrossPage.aspx-sivulle, vaan se lähetetään ensin samalle GetValues.aspx-sivulle, joka sisältää frmTest-lomakkeen. Tämä on tarpeen syötettyjen tietojen palvelinpuolen validoinnin tukemiseksi käyttämällä RequiredFieldValidation-, RangeValidation- ja muita ohjausobjekteja. Voit tarkastella WebForm_DoPostBackWithOptions-menetelmää tämän artikkelin edellisessä kappaleessa mainitussa WebResource.axd-tiedostossa.

Sivun suunnittelumallit

Mikä on ensimmäinen asia, joka erottaa yhden Web-sivuston toisesta?
Keskiverto Internetin käyttäjälle tärkein ero on sivujen monipuolinen ulkoasu. Ennen kuin sivuston vierailija kohtaa Web-sovelluksen toimivuuden, hän arvioi, pitääkö hän sivujen ulkonäöstä. Siksi sivun suunnittelu on tuskin vähemmän tärkeää kuin yleinen toimivuus. Kehittäjän tehtävänä on kirjoittaa koodia ja suunnittelijan tehtävänä on luoda ulkoinen suunnittelu ja sivujen HTML-koodin asettelu. Useimmissa tapauksissa on tarpeen varmistaa mahdollisuus rinnakkaiseen työskentelyyn sovelluskoodin ja HTML-malli
On syytä huomata, että useimpien nykyaikaisten Web-sivustojen ulkoasu on samanlainen kaikilla sivuilla ja jokaisella sivulla on yhteisiä suunnitteluelementtejä.
ASP.NET 1.x:ssä yleiset sivun suunnitteluelementit käärittiin käyttäjän ohjaimiin ja sisällytettiin jokaiselle sivulle, tai vaihtoehtoisesti sivut muutettiin ohjausobjekteiksi käyttämällä yhtä sivua pohjana, johon ohjaimia ladattiin URL-merkkijonon perusteella. . ASP.NET 2.0:n lähestymistapa on lähellä toista näistä lähestymistavoista, mutta sisältää merkittäviä etuja. Kehittäjän ei enää tarvitse muuntaa sivuja käyttäjien ohjauksiksi, mikä tekee kehityksestä ja virheenkorjauksesta paljon helpompaa. Se myös yksinkertaistaa merkittävästi suunnittelijan työtä, koska hänen tehtävänsä on rajoitettu vain useiden ASP.NET-elementtien sisällyttämiseen mallisivun koodiin. Lisää yksityiskohtainen vertailu

ASP.NET 2.0 -mallinnustekniikoita, joissa on olemassa olevia mallintamistekniikoita, suositellaan katsomaan Fritz Onyenin artikkelissa.

Suunnittelumallin luominen Sivun suunnittelumalli (Master pages) on tavallinen ASP.NET-sivu, jolla on muutamia lisämääritteitä ja ominaisuuksia ja joka sisältää yhden tai useamman erikoiselementin Sisällönhallinta
PlaceHolder. Tavallisen sivun muuttamiseksi malliksi riittää, että sivu-direktiivi korvataan pääkäskyllä. Tämän jälkeen sinun on lisättävä sivun merkintöihin palvelinelementit

ContentPlaceHolder ohjaa niitä sivun osia, joihin sijoitetaan tietoja, jotka eivät liity yleiseen ulkoasuun.

Kotisivuni

Aika: Sama kuin ko tavallinen sivu
, ohjelman logiikkatiedostossa voit työskennellä olemassa olevien ohjaimien kanssa, luoda ja lisätä uusia pyyntöparametrien perusteella, muuttaa sivua ja sen toimintaa. Siten voit laittaa web-sovelluksen ulkoasun luomisen logiikan lähes kokonaan sivumalliin.

  • ContentPlaceHolder-säätimen avulla voit määrittää käytettävän sisällön, jos mallia käyttävä sivu ei ohita ohjausobjektin sisältöä.
  • Kotisivu

Sisällysluettelo

Suojattu void Page_Load(objektin lähettäjä, EventArgs e) ( PageTime.InnerText = DateTime.Now.ToShortDateString(); ) julkinen merkkijono Otsikko ( get ( paluu SivuTitle.InnerText; ) set ( SivuTitle.Sisäteksti = arvo; ) )

Sivun luominen

Suunnittelupohjien käyttö asettaa omat vaatimuksensa sivuille. Koska malli sisältää ContentPlaceHolder-säätimiä, sivulla on oltava Sisällön ohjausobjektit, jotka sisältävät merkintäkoodin, ja muita ohjaimia, jotka hahmonnetaan tuloksena olevalla sivulla. Sivulla ei saa olla palvelimen ohjausobjekteja tai merkintäkoodia sisällönhallinnan ulkopuolella.

  • Sivu 1
  • Sivu 2
  • Sivu 3

Aivan kuten mallin kanssa, sivun logiikkakoodi luodaan tavalliseen tapaan. Ainoa ero on, että sivulla ei ole omia objekteja, kuten HeadControl, joten sinun on käytettävä linkkiä mallisivulle Master-ominaisuuden kautta.

Suojattu void Page_Load(objektin lähettäjä, EventArgs e) ( if (!Page.IsPostBack) Master.Page.Header.Title = "Home page"; } protected void btnShow_Click(object sender, EventArgs e) { PlaceHolder.Controls.Add(new LiteralControl(" alert("Добрый день, " + txtName.Text + ""); ")); Master.Page.Header.Title = "Hyvää iltapäivää," + txtName.Text; }!}

Jos haluat sitoa sivun malliin, käytä Page-direktiivin MasterPageFile-attribuuttia. Jos haluat sitoa saman mallin kaikille hakemiston sivuille, MasterPageFile-attribuuttia ei tarvitse määrittää jokaiselle sivulle, riittää, että asetat perusmallin web.config-tiedostoon.

Lisäksi ASP.NET antaa sinun asettaa teeman ohjelmallisesti. Kuten edellä mainittiin, suunnittelumallin lataaminen ja linkittäminen tapahtuu, kun sivua valmistellaan alustusta varten. Siksi, jos sinun on muutettava sivun suunnittelumallia, sinun on tehtävä tämä PreInit-tapahtumakäsittelijässä.

Suojattu void Page_PreInit(objektin lähettäjä, EventArgs e) ( Page.MasterPageFile = "AnotherMaster.master"; )

ASP.NET-mallin käsittely

Kun sivua avataan ensimmäisen kerran, ASP.NET etsii ja kokoaa kokoonpanot kaikille hakemiston malleille. Tämä toiminto kestää jonkin aikaa hakemistossa olevien mallisivujen määrästä riippuen, mutta se suoritetaan vain kerran. Siksi, jos hakemistossa on käyttämättömiä malleja, tämä ei johda suorituskyvyn heikkenemiseen sovelluksen ollessa käynnissä, ainoa haitta on ylimääräinen aika ja tarpeettomien kokoonpanojen kokoaminen käyttämättömille sivuille.
Käytettäessä sivun aspx-tiedostoa tietyllä suunnittelumallilla, käännösprosessi ei juuri eroa normaalista sivun käännösprosessista, paitsi että luodaan MasterPage-malliluokka, johon linkki löytyy Page.Master-ominaisuudesta.
Sivu käy sitten läpi kaikki edellä tässä artikkelissa kuvatut vaiheet, jolloin luodaan HTML-koodi, joka lähetetään asiakkaalle. Vastaanotetussa HTML-selain Koodi ei voi enää määrittää, mikä osa koodista on määritelty suunnittelumallissa ja mikä osa koodista on määritelty itse sivulla, koska ContentPlaceHolder- ja Content-säätimillä ei ole HTML-vastaavuutta eivätkä ne luo. muita tunnisteita kuin niiden sisältö.

Kotisivu

  • Sivu 1
  • Sivu 2
  • Sivu 3

Aika: 20.03.2005

Koska malli on sivun osajoukko, on sallittua luoda sisäkkäisiä malleja määrittämällä mallin polku toiseen malliin Master-direktiivissä MasterPageFile-attribuutin avulla. Tätä varten sinun on määritettävä ContentPlaceHolder-säätimet päämallissa ja "lapsi"-malleissa ContentPlaceHolder-elementtien ohella määritettävä sisältösäätimet, jotka korvaavat perusmallin ContentPlaceHolder-elementtien sisällön.

Käyttö erilaisia ​​malleja eri selaimille

Jokainen verkkokehittäjä tietää hyvin, että eri selaimet (esimerkiksi Microsoft Internet Explorer, Netscape Navigator, Mozilla FireFox jne.) käsittelevät HTML-koodia eri tavalla ja mikä tärkeintä, niillä on hieman erilaiset ohjelmointimallit, mikä vaikeuttaa asiakasskriptien luomista.
Tämän ongelman ratkaisemiseksi on kaksi päämenetelmää, joita käytetään sekä ASP.NET 1.x:ssä että perinteisessä ASP:ssä. Ensimmäinen on, että asiakasselaimelle lähetetään asiakaskoodi, joka perustuu tyypin ja selainversiot, suorittaa joitain toimintoja. Toinen on ohjata käyttäjän selain sivuille, jotka on erityisesti optimoitu tietylle selaimelle. ASP.NET tekee tämän tyyppisten sivujen luomisesta helppoa, koska ajonaika luo HTML-koodin tavallisille palvelinohjauksille asiakkaan selaimen tietojen perusteella. Suunnittelumalleja käytettäessä voit luoda useita malleja kullekin selaimelle ja määrittää sivun Sivu-ohjeessa käytettävää mallia.

Luettelo ASP.NET:n käyttämistä selaimista ja selainominaisuuksista löytyy hakemistosta %WINDIT%\Microsoft.NET\Framework\version\CONFIG\Browsers.

Web-sovellusten yksinkertaistettu lokalisointi Käyttäjän alueellisten asetusten määrittäminen

Sovellusten lokalisoimiseksi ASP.NET 1.x:ssä kehittäjän piti usein kirjoittaa koodia määrittääkseen käyttäjän kieliasetukset. Tämä koodi sijoitettiin usein global.asax-tiedostoon ja sen tehtävänä oli asettaa käyttäjän kieli nykyisen prosessin kieleksi luomalla CultureInfo-objekti ja määrittämällä sen CurrentCulture- ja CurrentUICulture-ominaisuudet CurrentThread-objektille:

Void Application_BeginRequest (Object sender, EventArgs e) ( if (Request.UserLanguages.Length > 0) ( CultureInfo UserCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages); Thread.CurrentThread.CurrentCulture = UserCulture.CultureThreCulture ulture; )

ASP.NET 2.0:ssa on mahdollista siirtää käyttäjän maa-asetusten määrittäminen ajonaikaiseen ympäristöön. Riittää, kun asetat @Page-direktiivin attribuutit Culture="auto" ja UICulture="auto", jotta käyttäjän sivun alueasetukset määritetään automaattisesti. Siinä tapauksessa. jos haluat saavuttaa tämän vaikutuksen kaikilla sivuston sivuilla, lisää vain seuraava rivi:

Lokalisointilausekkeet

ASP.NET 2.0:n avulla voit luoda kokoonpanoja paikallisista resursseista kullekin sivulle ja sitoa ohjausobjekteja näihin resursseihin tallennettuihin tietoihin käyttämällä lausekkeita, jotka on sijoitettu suoraan ASPX-tiedoston näkymäkoodiin. Tätä varten käytetään attribuuttia meta:resourcekey, jonka arvo analysoidaan sivun suorituksen aikana.

Valitse Kieli

Tai voidaan käyttää uutta lauseketta:

Jotta staattista tekstiä voitaisiin lokalisoida samalla tavalla, otettiin käyttöön ASP.NET 2.0 uusi elementti Lokalisointisäädin, jonka avulla voit käyttää yllä olevia lokalisointilausekkeita.

Teksti

Teksti

Voit lukea lisää lausekkeista, resurssien luomisesta ja käyttäjän alueellisten asetusten määrittämisestä tästä artikkelista.

Johtopäätös

Tämä artikkeli sisältää vain joitain perustietoja siitä, mitä uutta ASP.NET 2.0:ssa on verrattuna ASP.NET 1.x:ään.

ASP.NETin ominaisuudet on kuvattu lyhyesti, ja tämä artikkeli voi toimia lähtökohtana tämän edistyneen tekniikan oppimiseen. Yksityiskohtaisemman kuvauksen artikkelissa mainituista teknologioista ja uusista ominaisuuksista on suositeltavaa tutustua lisäkirjallisuuden luetteloon. Artikkelissa ei käsitelty useita tärkeitä innovaatioita - asynkroninen koodin suorittaminen, uudet ohjaimet, web.config-tiedoston fragmenttien salaus, uudet tietojen käyttömekanismit ja paljon muuta. Kaikki tämä on materiaalia, jolle voitaisiin omistaa useampi kuin yksi kirja. Mikäli mahdollista, kirjoittaja yrittää korostaa näitä innovaatioita tulevissa artikkeleissa. ASP.NET:n ensimmäiset sivut tarjoavat alustavan johdannon vankkaan verkkosovellusten luomisteknologiaan. Monimutkaistamatta ensimmäisiä vaiheita WebForms-, MVC-, WebAPI-kehyksillä, luomme yksinkertaisia ​​verkkosivuja, joissa on upotettu ohjelmakoodi kahdelle näkymänkäsittelijälle - ASPX ja Razor. Koodiprosessorit, joita kutsutaan myös renderöintimoottoreiksi tai moottoreiksi, on suunniteltu dynaaminen luominen Web-sivut korvaamalla

ohjelmakoodi

vastaava html-merkintä. ASPX-moottori on vakiomalli koodin lisäämiseen ASP.NET-verkkosivulle. ASPX käyttää runat="server">-tyyppejä, proseduureja ja muuttujien ilmoituslohkoja sekä sisäänrakennettua html-merkintöjen renderöintilohkoa. ASPX-malli koodin lisäämisestä on siirretty ASP.NET:iin alkuperäiseltä ASP-alustalta muutamin muutoksin. Razor on uusi mekanismi ohjelmakoodin visualisoimiseksi html-sivulla. Razor on älykäs dynaaminen moottori html:n luominen merkinnät. Sillä on selkeä syntaksi, ja sen avulla on helppo upottaa koodia verkkosivulle. Ohjelmakoodin erottamiseksi html-koodi käyttää @-symbolia yhdessä kanssa

kiharat olkaimet ja ilman sulkeita. Luodaksemme ensimmäiset verkkosivut käytämme ilmaista ohjelmistoympäristö WebMatrix-sivustojen kanssa työskentelyyn. Tällä hetkellä tästä ohjelmointityökalusta on luotu kolmas versio, joka riittää ammattimaisten verkkosivustojen luomiseen. Voit ladata sen verkkosivustolta Microsoft WebMatrix-linkin kautta. WebMatrix-ohjelma sisältää kaiken, mitä tarvitset ASP.NET-pohjaisten verkkosivustojen luomiseen ja testaamiseen: koodieditori taustavalolla ja IntelliSense, IIS Express -verkkopalvelin, tietokannan hallintajärjestelmä

Sivusto sisältää kolme sivua: pääsivun ja kaksi identtistä sivua taulukkojen luomiseen dynaamisesti ASPX- ja Razor-koneilla. Taulukon koko voidaan määrittää kyselyrivillä kahdella parametrilla. On sanottava, että periaatteessa molemmat käsittelijät luovat tehokkaasti html-merkintä, mutta tarjoavat erilaisen käyttömukavuuden.

ASPX-moottori edellyttää, että kaikki osat ja ohjelmakoodin osat on suljettu näkymälohkoihin. Tyypit, menettelyt ja muuttujat voidaan ilmoittaa runat="server">... -lohkossa. Attribuutti runat="server" erottaa tämä lohko JavaScript-lohkosta ja tarkoittaa tässä lohkossa olevan koodin käsittelyä suoraan palvelimella.

Listaus nro 1 ASPX-moottoria käyttävä verkkosivu

< !DOCTYPE html > < html xmlns ="http://www.w3.org/1999/xhtml"> < head runat ="server"> < meta http-equiv ="Content-Type" content ="text/html; charset=utf-8"/> < title > < link rel ="stylesheet" type ="text/css" href ="/css/style.css" /> < body > < h1 > < p >< a href ="/">Kotiin< p >Sarakkeiden määrä -< br />Rivien määrä -< table > < tr > < tr > < td >

Alla on Razorin upotetun koodinkäsittelijän verkkosivun koodi. Kiinnitä huomiota html-koodin ja lausekkeiden harmoniseen yhdistämiseen C#:ssa. Razor-moottorin avulla voit käyttää HTML-tageja suoraan ohjelmakoodin sisällä: käsittelijän älykäs komponentti erottaa HTML-merkinnät taitavasti C#-ohjelmakoodista.

Razor-moottorin listaus nro 2 Web-sivu

< !DOCTYPE html > < html lang ="ru"> < head > < meta http-equiv ="Content-Type" content ="text/html; charset=utf-8"/> < meta charset ="utf-8" /> < title >@nimisivu< link rel ="stylesheet" type ="text/css" href ="/css/style.css" /> < body > < h1 >@nimisivu< p >< a href ="/">Etusivu @ Html.Raw(createLinks.GetLinks())< p >Sarakkeiden määrä - @numberColumns< br />Rivien määrä - @numberRows< table > < tr >@for (int i = 0; i< numberColumns; i++) { < th >Otsikko # @(i + 1 ) ) @ for (int row = 0; rivi< numberRows; row++) { < tr >@for(int col = 0; col< numberColumns; col++) { < td >@(rivi+1 ) x@(sara+1 ) ) )

Voit testata sivustoa useilla tavoilla:

  • MS Visual Studio - Tiedosto->Avaa verkkosivusto ->Valitse kansio, johon arkisto purettiin Käynnistä selaimessa (tai F5-näppäin)
  • WebMatrix - Avaa->Kansio->Valitse kansio, johon sivustoarkisto puretaan->Valitse kansio Aloita
  • Pura arkisto osoitteeseen fyysinen kansio paikallinen tai Internet-sivusto. Käynnistä sivusto selaimessa sen URL-osoitteesta.
  • Lopuksi voidaan lisätä, että sivuston käyttäjälle tieto siitä, millä moottorilla verkkosivut toimivat, ei ole kovin tärkeää. Mutta ohjelmoija valitsee varmasti Razorin työskenneltyään jokaisen sulautetun koodinkäsittelijän kanssa.

    Viimeksi päivitetty: 31.10.2015

    Pääsivuja käytetään luomaan sivustolle yhtenäinen, yhtenäinen ulkoasu. Pohjimmiltaan sivupohjat ovat samoja näkymiä, mutta voit sisällyttää niihin muita näkymiä. Voit esimerkiksi määrittää sivupohjalle elementtejä, jotka ovat yhteisiä kaikille muille näkymille, sekä sisällyttää yhteisiä tyylejä ja komentosarjoja. Tästä johtuen meidän ei tarvitse tehdä jokaista erillinen esitys määritä tyylitiedostojen polku ja muuta sitä tarvittaessa. Ja sivupohjasivuilla käytetyt paikkamerkit tai paikkamerkit mahdollistavat muiden näkymien lisäämisen niiden tilalle.

    Oletuksena, kun luot uuden ASP.NET MVC 5 -projektin, projektiin lisätään jo perussivu nimeltä _Layout.chtml, joka löytyy Views/Shared-hakemistosta. Muutimme sen luvun 2 liitteessä seuraavasti:

    @ViewBag.Title @RenderBody()

    Ensi silmäyksellä tämä on normaali näkymä yhdellä poikkeuksella: se käyttää @RenderBody()-menetelmää, joka on paikkamerkki ja joka korvataan muilla tätä sivupohjaa käyttävillä näkymillä. Tämän seurauksena voimme helposti määrittää yhtenäisen tyylin verkkosovelluksen näkymille.

    Jotta voit käyttää sivupohjaa näkymässä, meidän on määritettävä polku haluttuun sivupohjaan Asettelu-osiossa. Esimerkiksi Index.cshtml-näkymässä voit määrittää sivupohjan seuraavasti:

    Jos emme käytä sivupohjaa, määritämme Layout = null; .

    Ei myöskään ole välttämätöntä käyttää samaa sivupohjaa kaikille lähetyksille. Voit määrittää useita sivupohjasivuja, esimerkiksi yhden foorumille, yhden blogille jne., ja sivuston osista riippuen yhdistää tarvitsemasi sivun. Ne lisätään projektiin samalla tavalla kuin tavalliset näkymät.

    Sivupohjalla voi olla useita osioita, joihin näkymät voivat sijoittaa sisällön. Lisätään esimerkiksi alatunnisteosio sivupohjalle:

    @ViewBag.Title

    @RenderBody() @RenderSection("Alatunniste")

    Nyt kun suoritamme edellisen hakemistonäkymän, saamme virheilmoituksen, koska Alatunniste-osiota ei ole määritetty. Oletusarvoisesti näkymän tulee näyttää sisältöä sivupohjan jokaisessa osassa. Sen vuoksi lisätään alatunnisteosio hakemistonäkymän alaosaan. Voimme tehdä tämän käyttämällä @section-lauseketta:

    @( Layout = "~/Views/Shared/_Layout.cshtml"; ) @osion alatunniste ( Kaikki oikeudet pidätetään. Syte Corp. 2012. )

    Mutta tällä lähestymistavalla, jos meillä on joukko näkymiä ja haluamme yhtäkkiä määrittää uuden osion sivupohjalle, meidän on muutettava kaikkia olemassa olevia näkymiä, mikä ei ole kovin kätevää. Tässä tapauksessa voimme käyttää yhtä joustavan osion konfiguroinnin vaihtoehdoista.

    Ensimmäinen vaihtoehto on käyttää RenderSection-menetelmän ylikuormitusta, jonka avulla voit ilmoittaa, että osiota ei tarvitse määrittää näkymässä. Jos haluat merkitä Footer-osion valinnaiseksi, sinun on välitettävä arvo false menetelmälle toiseksi parametriksi:

    @RenderSection("alatunniste", väärä)

    Toisen vaihtoehdon avulla voit asettaa oletusosion sisällön, jos tätä osaa ei ole määritetty näkymässä:

    @if (IsSectionDefined("Alatunniste")) ( @RenderSection("Alatunniste") ) else ( Alatunnisteelementin oletussisältö. )

    ViewStart

    Jos projektissamme on pari näkymää, voimme helposti muuttaa jokaisen sivupohjakuvauksen manuaalisesti Asettelu-osiossa, jos esimerkiksi päätämme käyttää eri sivupohjaa. Mutta jos meillä on monia näkemyksiä, tämä ei ole kovin kätevää.

    Näkymien joustavampaa määritystä varten on tarkoitettu _ViewStart.cshtml-sivu. Tämän sivun koodi suoritetaan ennen kaikkien samassa hakemistossa olevien näkymien koodia. Tämä tiedosto käytetään peräkkäin jokaiseen samassa hakemistossa olevaan näkymään.

    Kun luot ASP.NET MVC 5 -projektin, tiedosto _ViewStart.cshtml lisätään oletusarvoisesti Views-hakemistoon. Tämä tiedosto määrittää oletuspohjaisen sivun:

    @( Layout = "~/Views/Shared/_Layout.cshtml"; )

    Tämä koodi suoritetaan ennen mitä tahansa muuta näkymässä määritettyä koodia, joten voimme poistaa Asettelu-osion muista näkymistä. Jos näkymän pitäisi käyttää eri sivupohjaa, ohitamme Layout-ominaisuuden ja lisäämme sen määritelmän näkymän alkuun.

    Hei w3ii HTML:ssä

    Tämä koodi näyttää esimerkin HTML-sivuna:




    Hei w3ii!


    firstpage.htm" ja luo myös linkki tiedostoon seuraavasti: firstpage.htm

    Hei w3ii ASP.NETissä

    Helpoin tapa muuntaa HTML-sivu ASP.NET-sivuksi on kopioida HTML-tiedosto uusi tiedosto.aspx-laajennuksella.

    Tämä koodi näyttää esimerkkimme kuten ASP.NET-sivulla:




    Hei w3ii!


    Jos haluat kokeilla tätä itse, tallenna koodi tiedostoon "firstpage.aspx" ja luo myös linkki tiedostoon seuraavasti: firstpage.aspx

    Miten tämä toimii?

    Pohjimmiltaan ASP.NET-sivu on täsmälleen sama kuin HTML-sivu.

    HTML-sivulla on tunniste .htm. Jos selain pyytää HTML-sivua palvelimelta, palvelin lähettää sivun selaimelle ilman muutoksia.

    ASP.NET-sivulla on .aspx-tunniste. Jos selain pyytää ASP.NET-sivua, palvelin käsittelee minkä tahansa suoritettava koodi sivulle, ennen kuin tulos lähetetään takaisin selaimeen.

    Yllä oleva ASP.NET-sivu ei sisällä suoritettavaa koodia, joten mitään ei suoriteta. Seuraavissa esimerkeissä lisäämme suoritettavan sivun koodin osoittamaan eron staattisten HTML-sivujen ja dynaamisten ASP-sivujen välillä.

    Klassinen ASP

    Active Server Pages (ASP) on ollut olemassa useita vuosia. ASP:n avulla suoritettava koodi voidaan sijoittaa HTML-sivuille.

    ASP:n aiempia versioita (ennen ASP.NETiä) kutsutaan usein klassisiksi ASP:iksi.

    ASP.NET ei ole täysin yhteensopiva Classic ASP:n kanssa, mutta useimmat Classic ASP -sivut toimivat hyvin ASP.NET-sivuina vain pienin muutoksin.

    Jos haluat oppia lisää klassisesta ASP:stä, käy ASP-opetusohjelmassamme.

    Dynaamiset sivut klassisessa ASP:ssä

    Havainnollistaaksemme, kuinka ASP voi renderöidä sivuja, joissa on dynaamista sisältöä, lisäsimme suoritettavaa koodia (punaisella) edelliseen esimerkkiin:




    Hei w3ii!




    Tunnisteen sisällä oleva koodi suoritetaan palvelimella.

    Response.Write on ASP-koodi, jolla kirjoitetaan jotain HTML-lähtövirtaan.

    Now() on palvelimen palautusfunktio nykyinen päivämäärä ja aikaa.

    Jos haluat kokeilla tätä itse, tallenna koodi tiedostoon nimeltä "dynpage.asp" ja luo myös linkki tiedostoon seuraavasti: dynpage.asp

    Dynaamiset sivut ASP .NET:ssä

    Tämä koodi näyttää esimerkkimme kuten ASP.NET-sivulla:




    Hei w3ii!




    Jos haluat kokeilla tätä itse, tallenna koodi tiedostoon nimeltä "dynpage.aspx" ja luo myös linkki tiedostoon seuraavasti: dynpage.aspx

    ASP.NET vs. klassinen ASP

    Edelliset esimerkit eivät osoita eroja ASP.NETin ja klassisen ASP:n välillä.

    Kuten kahdesta viimeisestä esimerkistä näet, näiden kahden ASP- ja ASP.NET-sivun välillä ei ole eroja.

    Seuraavissa luvuissa näet, kuinka ASP.NET-palvelinohjauksista tehdään klassista ASP:tä tehokkaampia.