Toodete loendi kuvamine. Tühistamatus on pöördumatu

Selle peatüki lõpuni saime luua domeenimudeli ja hoidla, ilma et kasutajaliidese projekti isegi puudutaksime. Kuid selleks, et teil igav ei hakkaks, muudame kurssi ja hakkame MVC Frameworki täiel määral kasutama. Vajadusel lisame mudelile ja hoidlasse uusi funktsioone.

Selles jaotises loome kontrolleri ja toimimismeetodi, mis kuvab teavet poes olevate toodete kohta. Praegu on meil andmeid ainult simuleeritud salvestusruumis, kuid käsitleme seda probleemi hiljem. Teeme ka esialgse seadistuse marsruutimise konfiguratsioon nii et MVC teab, kuidas taotlused taotlusega vastastikku töötavale kontrollerile kaardistada.

Lisage kontroller

Paremklõpsake projekti SportsStore.WebUI kausta Controllers ja valige kontekstimenüüst Add - Controller. Pange kontrollerile nimi ProductController ja veenduge, et suvand Mall sisaldaks tühja kontrolleri. Kui Visual Studio avab faili redigeerimiseks, saate automaatselt lisatud vaiketoimingumeetodi eemaldada ja teie fail näeb välja nagu kirje 7-6.

Kirje 7-6: ProductControlleri esialgne määratlus
süsteemi kasutamine; kasutades System.Collections.Generic; kasutades System.Linq; kasutades System.Web; kasutades System.Web.Mvc; kasutades SportsStore.Domain.Abstract; kasutades SportsStore.Domain.Entities; nimeruum SportsStore.WebUI.Controllers (avaliku klassi ProductController: Controller (privaatne IProductRepository repository; public ProductController (IProductRepository productRepository) (this.repository = productRepository;)))

Indeksitegevuse meetodi eemaldamisega lisame konstruktori, mis võtab IProductRepository parameetri. See võimaldab Ninjectil süstida tootesalvest sõltuvust, kui see tuvastab kontrolleriklassi. Importisime ka SportsStore.Domain nimeruumid, et pääseda poe- ja mudeliklassidele juurde ilma nende nimesid täpsustamata.

Kirje 7-7: Toimimismeetodi lisamine
süsteemi kasutamine; kasutades System.Collections.Generic; kasutades System.Linq; kasutades System.Web; kasutades System.Web.Mvc; kasutades SportsStore.Domain.Abstract; kasutades SportsStore.Domain.Entities; nimeruum SportsStore.WebUI.Controllers (avalik klass ProductController: Controller (privaatne IProductRepository repository; public ProductController (IProductRepository productRepository)) (this.repository = productRepository;) public ViewResult List () (tagastusvaade (repository.Products);) } }

See vaatamismeetodile kutsumine (ilma vaate nime määramata) käsib raamistikul renderdada antud tegevusmeetodi vaikevaate. Edastades tooteobjektide loendi vaatamismeetodile, pakume raamistikule andmeid, mis täidavad mudeli objekti tugevalt trükitud vaates.

Vaate lisamine

Nüüd peame lisama loenditoimingu meetodi vaikevaate. Paremklõpsake koodiredaktoris loendimeetodil ja valige kontekstimenüüst Lisa - Vaade. Nimetage vaadete loend ja märkige ruut, mis loob tugevalt trükitud vaateid, nagu on näidatud joonisel 7-5.

Joonis 7-5: Loendivaate lisamine

Sisestage väljale Mudeliklass IEnumerable ... Peate selle pealkirja sisestama; see ei ole saadaval ripploendist, mis ei sisalda domeeniobjektide loendamist.

Edaspidi kasutame oma seisukohtade järjepidevuse tagamiseks standardset Razori paigutust, mis sisaldub põhiprojekti mallis. Märkige ruut Kasuta paigutust, kuid jätke tekstikasti tühjaks, nagu näidatud. Vaate loomiseks klõpsake nuppu Lisa.

Vaateandmete visualiseerimine

Teades, et vaates olev mudel on IEnumerable Saame luua loendi, kasutades Razori eelotsasilmust, nagu on näidatud loendis 7-8.

Kirje 7-8: List.cshtml vaade
@model IEnumerable @ (ViewBag.Title = "(! LANG: Tooted"; } !} @foreach (var p mudelis) (

@ p. Nimi

@ lk. Kirjeldus

@ p.Price.ToString ("c")

}

Muutsime ka lehe pealkirja. Pange tähele, et me ei pea vaatamisandmete kuvamiseks kasutama raseerimisteksti ega @: elemente, sest iga koodikere rida on kas Razori direktiiv või algab HTML -elemendiga.

Nõuanne

Pange tähele, et teisendasime atribuudi Hind stringiks, kasutades meetodit ToString ("c"), mis kuvab arvväärtused valuutana vastavalt teie serveri kultuuriseadetele. Näiteks kui server on konfigureeritud kui en-US, siis (1002.3). ToString ("c") tagastab $ 1.002.30, kuid kui server on konfigureeritud en-GB-na, tagastab sama meetod £ 1.002.30. Saate muuta oma serveri kultuuriseadeid, lisades sõlmele failist Web.config järgmine jaotis: .

Vaikimistee seadistamine

Praegu peame lihtsalt ütlema MVC platvormile, et saidi juurile (http: // mysite /) tulevad päringud tuleb kaardistada klassi ProductController tegevusmeetodiga Loend. Selleks muudame avaldust failis App_Start / RouteConfig.cs meetodil RegisterRoutes, nagu on näidatud loendis 7-9.

Kirje 7-9: Vaike marsruudi lisamine
süsteemi kasutamine; kasutades System.Collections.Generic; kasutades System.Linq; kasutades System.Web; kasutades System.Web.Mvc; kasutades System.Web.Routing; nimeruum SportsStore.WebUI (avalik klass RouteConfig (avalik staatiline tühine RegisterRoutes (RouteCollection marsruudid)) kontroller) / (tegevus) / (id) ", vaikeseaded: uus (kontroller =" Toode ", tegevus =" Loend ", id = UrlParameter.Valikuline));)))

Muutke avaleht tooteks ja indeks loendiks, nagu loendis näidatud. ASP.NET -i marsruutimisvõimaluste kohta räägime üksikasjalikumalt 13. peatükis. Praegu piisab sellest, kui teame, et see muudatus suunab vaikimisi URL -i taotlused meie määratud meetodi juurde.

Nõuanne

Pange tähele, et loendis 7-9 määrasime kontrolleri tooteks, mitte ProductControlleriks, mis on klassi nimi. See on osa ASP.NET MVC nimetamisskeemist, milles kontrolleriklasside nimed lõppevad alati kontrolleriga ja see osa nimest jäetakse klassile viitamisel välja.

Rakenduse käivitamine

Kõik rakenduse põhikomponendid on valmis. Meil on tegevusmeetodiga kontroller, millele helistatakse, kui taotletakse vaike -URL -i. See tegevusmeetod tugineb meie poe liidese mõnitamisele, mis genereerib lihtsaid testiandmeid. Testiandmed edastatakse vaatele, mille seostasime tegevusmeetodiga, ja see loob iga toote kohta lihtsa teabe loendi. Kui käivitate rakenduse, näete tulemust, mis on näidatud joonisel 7-6.

Joonis 7-6: Rakenduse põhifunktsioonide ülevaatamine

See on tüüpiline ASP.NET MVC raamistiku arengumuster. Pühendame kohandamisele üsna palju aega, kuid siis toimub rakenduse põhifunktsioonide arendamine väga kiiresti.

Ok, nii et ma olen uus kogu MVC maailmas, kuid see tundub olevat väga hea viis asjade tegemiseks ja ma üritan selle siin tööle saada.

Probleem on järgmine: ma ei saa oma SQL -andmebaasi tabelist andmeid oma registreerimislehe lihtsasse rippmenüüsse.

Mul pole lihtsalt aimugi, kuhu materjal panna, kus on kood tabeli avamiseks, identifikaatorite valimiseks, kuhu vastus panna.kirjutada ja kuidas see vaatele saata?

Minu mudel on selline:

Avaliku klassi kasutajad (avaliku stringi nimi (get; set;) public int user_id (get; set;))

Avalik tegevus Tulemuste loend Kasutaja () (tagasivaade ();)

Ja minu vaade on selline:

@model Community.Models.users

Olen googeldanud 2 päeva ja vaadanud youtubest mõnda videot, kuid tulutult, ma ei leia seda. Palun, kellel siin on teadmisi? Ja palun nimetage mulle häid õpetusi ja / või foorumeid, kust ma võin rohkem küsimusi leida

Selle projektiga pole veel õnne.

Loon vormi ja sellisel kujul soovin db-tsüklit (IEnumerable). Kuid praegune mudel ei ole loetamatu. Olen peaaegu ummikus, kui vaatan hunnikut õpetusi ja need kõik loetlevad vaid ühe ühenduse, mis siis, kui mul on vaja kahte mudelit?

Siin on minu kontroller, ma arvasin, et peate loendi vaatamiseks edastama, eks?

Avaliku tegevuse tulemuste registreerimine () (tagasivaade (db.users.ToList ());)

Kuidas saan selle loendi oma vaates ilma IEnumerable mudelita?

@neoistheone, sinu näide ei aidanud mind palju, minu DB avaneb nii:

Private DataBaseContext db = new DataBaseContext ();

ja ma ei tea, kuidas seda teha, kuid see avab ühenduse. Olen nii palju tunde proovinud, lihtsalt tobe, pole kaua maganud!

Kasutan ASP-Classic fyi programmeerimist ja see on minu esimene tõsine katse värskendada oma teadmisi kaasaegse keele programmeerimise ja OOP kohta.

6 vastust

Lisa SelectList oma mudelile:

Avalik valimisloend DropDownList (get; set;)

looge selle kollektsiooni jaoks klass:

Avaliku klassi MyListTable (avalik stringi võti (get; set;) avalik string Display (get; set;))

ja seejärel laadige oma kontrolleris andmebaasist MyListTable klassi andmed:

Var list = uus nimekiri (); kasutades (SqlConnection c = uus SqlConnection (cString)) kasutades (SqlCommand cmd = new SqlCommand ("SELECT KeyField, DisplayField FROM Table", c)) (kasutades (SqlDataReader rdr = cmd.ExecuteReader ()) {while (rdr. )) (list.Add (uus MyListTable (Key = rdr.GetString (0), Display = rdr.GetString (1)));))) var model = new users (); model.DropDownList = uus SelectList (list, "Key", "Display");

ja siis lõpuks peate oma mudeli vaatele saatma:

Tagasivaade (mudel);

Razoris saate seda kuvada:

@ Html.DropDownListFor (m => Model.DropDownList);

Muidugi võite neid asju nimetada paremateks nimedeks, kuid saate idee.

Suurepäraseid vastuseid on juba olemas, kuid siin on teine ​​lähenemisviis.

Kasutate mudelina kasutajat, vaate mudelina ListUserViewModel ja kontrollerina UserController. Vaatemudeli ülesanne on kanda kontrollerilt kogu teave, mida on vaja lehel kuvada, lisamata mudeliklassi soovimatuid omadusi. Kasutaja ülesannete loendis ripploendi andmebaasist.

Avaliku klassi kasutaja // Muide, kasutage klassi nimetamisel ainsust (avaliku stringi nimi (get; set;) public int user_id (get; set;))

Vaate mudel

Avaliku klassi ListUserViewModel (avalik loend Kasutajad (get; set;))

kontroller

Avaliku klassi UserController: kontroller (privaatne DataBaseContext db = new DataBaseContext (); public ActionResult ListUser () (var users = db.Users.ToList (); var viewModel = new ListUserViewModel (Users = users); return View (viewModel);) )

Kasutage nüüd mudelivaates kasutaja asemel ListUserViewModel

@model Community.Models.ListUserViewModel

ja rippmenüüst

@ Html.DropDownListFor (m => m.Users, uus SelectList (Model.Users, "user_id", "name"), "")

Selgitus:

Loote rippmenüü kasutajatele, kellel on Model.Users loendi andmeallikana. "user_id" kui valitud kasutaja väärtus ja "name" kui kuvatav silt. viimane argument (panin tühja stringi "") on vaikeväärtus, mida rippmenüü kuvatakse enne valikut.

Loodan, et see aitab teid või kedagi teist.

Proovi seda,

Avalik string CoutryID (get; set;) avalik loend CountryList (saada; seada;)

Kontrollermeetod, mis täidab loendi

Avalik nimekiri getCountryList () (kasutades (QRMG_VendorPortalDataContext _context = new QRMG_VendorPortalDataContext ()) (return (from c in _context.Countries where c.IsDeleted == false select c) .ToList ();))

Kuvatakse ripploend

@ Html.DropDownListFor (m => m.CoutryID, uus SelectList (Model.CountryList, "CoutryID", "Value"))

see on minu tabel andmebaasis

Vaadake minu toimingukontrollerit

// GET: Letters public ActionResult Index () (ViewBag.LetterStatus = new SelectList (LetterStatusService.GetAllLettersStatus (), "Id", (CultureHelper.GetCurrentCulture () == "ar")? "NameArabic": "Name", Request .QueryString ["LetterStatus"]); tagasivaade ();)

ja vaates

@ Html.DropDownList ("LetterStatus")

konstruktor, mida kasutan

Uus SelectList (nimekiri myListFromDatabase, string PropertyNameOfValueInHtml, string PropertyNameOfDesplayInHtml, string SelectedItemValue);

see Request.QueryString ["LetterStatus"], kuna saadan valitud üksused QuerySrtingile

ja praeguse kultuuri põhjal valisin, millist veergu kuvada

ja tulemus

kuid ma arvan, et parim viis seda teha on: - hankida või luua üksusi, seejärel korrata, et neid üle kanda, et luua valitud märgend käsitsi. Olen seda lähenemist hästi kirjeldanud

25.11.2006 12.7K

Sissejuhatus

ASP.NET on .NET Framework üks komponente. Loetleme lühidalt selle tehnoloogia peamised omadused.

* Ühiskeelne käitusaeg CLR
* .NET Framework Class Library
* .NET keeled (C #, VB.NET, J # ja teised)
* ADO.NET
* ASP.NET
* Veebiteenused
* Keskkeel MSIL (Microsoft Intermediate Language). See on CLR -i tööaja kokkupanija.

ADO.NET on klassikomplekt juurdepääsuks Microsoft SQL Serveri andmebaasidele, OLEDB andmeallikatele ja XML -failidele.

Projekti eri osi saab kirjutada erinevates keeltes, seda nimetatakse koostalitlusvõimeks. Proovime kirjutada projekti, kus üks leht on Visual Basicus ja teine ​​C #-is.

Arvutikeeli koostatakse ja tõlgendatakse. Kompileeritud keeles kirjutatud programmi koostamise käigus luuakse käivitatav fail (Windowsis - exe). See töötab kiiresti, kuid ei saa töötada teisel platvormil. Masinal, millel see töötab, peab olema sarnane konfiguratsioon. Näiteks kui programm kasutab dll -i, tuleb see teek installida ka sihtmasinasse. Tõlgendatud programmid koostatakse käitusajal, nii et need töötavad aeglasemalt, kuid ei ole masinaspetsiifilised. NET-raamistikus kasutatakse kaheastmelist kompileerimist, st esimene samm on kompileerimine MSIL-i ja teine ​​on just-in-time kompileerimine kompilaatori poolt käitusajal. JIT -kompilaator optimeerib selle masina koodi, millel see käivitatakse. ASP.NET -is kompileeritakse leht MSIL -ile esimest korda, kui klient sellele lehele pääseb. Koos sellega koostatakse klassid, mida see kasutab. Kui kasutate Visual Studio 2005, saate esimese päringu ootamise asemel sundida kõiki oma projekti lehti kompileerima. See võimaldab teil tuvastada süntaksi ja muid vigu.

MSIL on masinast sõltumatu monteerija. See võib töötada mis tahes masinas, kuhu CLR on installitud. Mono projekt üritab CLR -i teisaldada teistele platvormidele, võimaldades erinevatel platvormidel töötavatel serveritel suhelda.

Projektiga saate tutvuda veebisaidil http://mono-project.com

Leht http://go-mono.com/archive/xsp-0.10.html sisaldab XSP - ASP.NET serverit, mis võib olla Apache serveri - * nix - süsteemide põhiserveri laiendus.

Kuidas ASP.NET töötab?

Kui installime .NET -i, paigutatakse ka fail aspnet_isapi.dll vastavatesse C: WINDOWSMicrosoft.NETFramework kataloogidesse. See on ISAPI laiend ASP.NET rakenduste ( * .aspx * .asmx jne) päringute vastuvõtmiseks ja taotluste töötlemiseks aspnet_wp.exe töötajaprotsesside loomiseks. Interneti -server - IIS, mis on manustatud WebMatrixisse või manustatud Visual Studio Cassini - kasutab seda laiendit, kui neil on vaja hallata juurdepääsu lehtedele, millel on laiend ASPX.

See moodul parsib aspx-lehtede sisu koos koodi taga oleva failiga ja loob lehekeelega lehekeele klassi. Aspx -leht erineb tavalisest HTML -lehest serveri juhtelementide olemasolu tõttu, mida kirjeldatakse spetsiaalsete siltidega. Et mõista, kuidas ASP.NET töötab, on oluline märkida, et igal juhtmärgendil on vastav leheklassi liige. Näiteks,

teisendatud

@__ctrl = uus globaalne :: System.Web.UI.WebControls.Label ();

Page -objekti peamine ülesanne on HTML -koodi saatmine väljundvoogu. See klass on kompileeritud dll -ks, mis laaditakse veebiserveri protsessi. Ka lehe hilisemate päringutega tegeleb dll, kui lehe lähtekood ei muutu. Kõik need failid leiate .NET -i praeguse versiooni kataloogist Ajutised ASP.NET -failid. Kui töötame arenduskeskkonnas Visual Studio 2005 või VWD, luuakse iga projekti jaoks oma alamkataloog.

Projekti lehe ja kausta tüübid

Uusi faile saab projektile lisada dialoogi Uus fail kaudu. Kui tühjendate märkeruudu „Asetage kood eraldi faili”, loob Visual Studio ühe faili, mis sisaldab nii lehte kui ka koodi selle töötlemiseks (WebMatrixi stiilis).

Kõik failid paigutatakse projekti kataloogi. Ja vastupidi, kõik projektikataloogi paigutatud failid muutuvad selle osaks. Veebisaitide jaoks pole spetsiifilist .csproj -faili, mis loetleks selle koostisosad, nagu Visual Studio varasemates versioonides. Lahenduse struktuuri kirjeldatakse tekstifailis.sln. Lahendus võib hõlmata mitut veebisaiti ja raamatukogu.

ASP.NET 2.0 -l on eri failitüüpide jaoks spetsiaalsed projektide alamkataloogid. Näiteks kaust App_Code sisaldab avalikke klasse, tekstifaile ja mõnda muud (DataSet, klassidiagramm). Failid, mille laiendid .cs või .vb on leitud, kompileeritakse automaatselt, kui taotletakse projekti mis tahes lehte. App_Data sisaldab projektis kasutatud andmeallikaid - Access ja Microsoft SQL andmebaasid, XML -failid. Sellele kataloogile ei pääse juurde väljastpoolt, vaid ainult rakenduse enda kaudu. Teemade kaust sisaldab projekti teemasid (13. peatükk). Teemade rakendamine võimaldab teil oma saidi järjepidevat välimust kohandada ja hallata. App_GlobalResources sisaldab ressursse, näiteks stringitabeleid, mida saate luua erinevates keeltes. Ressursi keel valitakse automaatselt sõltuvalt kasutaja brauseri seadetest. Kaust App_WebReferences sisaldab linke kasutatud veebiteenustele.

Näiteks saate piltide salvestamiseks luua oma projekti alamkatalooge.

Projekt kahes keeles

Veebisaidi projekt koosneb aspx -lehtedest ja klassidest, mida lehed kasutavad (ja muidugi mitmesugustest ressurssidest). Klassidega failid, millele pääseb juurde erinevatelt lehtedelt, paigutatakse spetsiaalsesse kausta App_Code. Kompileerimisel paigutatakse need ühte koosseisu - dll raamatukogu kaasaskantavas käivitatavas vormingus. Pole tähtis, mis keeles klass on kirjutatud, kui see on .NET -keel.

Projektis saab kasutada ka valmis kompileeritud kolmanda osapoole komplekte. Need paigutatakse kausta Bin. Need tuleb aga projekti importida.

<%@ Import Namespace="MyCustomNamespace" %>

Loo uus projekt. Lisage sellele fail, valides failitüübi Klass ja Visual Basicu keele. Keskkond ise pakub selle paigutamist kausta Code. Nimetagem seda CustomClassiks. Tal on väga lihtne kood. Ainult üks funktsioon, mis lisab parameetrina edastatud nimele sõna Tere.

Impordib Microsoft.VisualBasic avaliku klassi CustomClass avaliku funktsiooni GetMessage (ByVal nimi kui string) stringina Tagastab "Tere!" Ja nimi Lõppfunktsiooni lõppklass

Lisage oma projektile leht CodeFolder_cs.aspx. See leht on kirjutatud C #-ga, kuid loob klassi, mis on kirjutatud VB.NET -is.

<%@ page language="C#" %> ASP.NET tekstisisesed lehed

Tere tulemast ASP.NET 2.0!

Sisestage oma nimi:

Leht määratleb vormi, mis sarnaneb Windowsi taotlusvormiga. Sellel on nupp, millele klõpsates töödeldakse funktsiooni Button1_Click. See loob klassi ja kutsub oma funktsiooni GetMessage parameetriga, mis on võetud redigeerimiskontrollist. Tagastusväärtus kirjutatakse elemendile Label1. Lihtsamas versioonis näeb see välja selline:

Label1.Text = “Tere” + TextBox1.Text;

Klassi saab kirjutada C # -ga ja kasutada Visual Basicu lehelt.

süsteemi kasutamine; avalik klass CustomClass2 (avalik string GetMessage (stringi sisend) (tagastage "Tere alates C #" + sisend;)) CodeFolder_vb.aspx lehe kood:

Kuid kataloogi App_Code saab paigutada ainult ühe keele. Kui faile on erinevates keeltes, siis projekti ei kompileerita. Kahe keele kasutamiseks peate looma alamkataloogi, lisama selle faili web.config ja sisestama selles teises keeles olevad failid.

Registreerimine failis web.config:

... ...

Direktiivid

Iga aspx -leht sisaldab tavaliselt direktiive, mille abil saate lehe käitumist juhtida. Võite neid pidada keeleks, millega suhtlete kompilaatoriga, öeldes talle, kuidas antud lehte käsitleda. Direktiivid paigutatakse tavaliselt faili algusesse. Lehe direktiiviga kohtusime juba esimeses loengus.

Direktiivide deklareerimise süntaks on järgmine:

<%@ %>

Saate deklareerida mitu direktiivi korraga:

<%@ %>

ASP.NET 2.0 -s on 11 direktiivi.
Direktiiv Atribuudid Kirjeldus
@Kogunime nimi
Src Impordib lehele või juhtelementi määratud nimega koostu.
@Control on sama mis Page. Kasutatakse omaduste määramiseks oma kohandatud juhtelementide loomisel.
@Implements Interface Näitab, et selle lehe klass rakendab antud liidest
@Import nimeruumi Impordib nimeruumi
@Master on sama mis leht. Kehtib kujundusmalli lehtedele (juhtleht). Uus ASP.NET 2.0
@MasterType TypeName
VirtualPath Annab tugevalt trükitud viite kujundusmallis sisalduvale klassile. Võimaldab juurdepääsu selle klassi atribuutidele.
@OutputCache Duration
Asukoht
VaryByCustom
VaryByHeader
VaryByParam
VaryByControl juhtelemendi leht või vahemälu juhtimine. Seda on üksikasjalikumalt kirjeldatud loengus 15.
@Page vt allpool Selle lehega seotud atribuudid. Kasutatakse ainult failides laiendiga aspx
@PreviousPageType TypeName
VirtualPath Leht, kust kasutaja andmed sisestas, saadeti. Uus ASP.NET 2.0. Varem postitasid lehed postitusi ainult endale.
@Viiteleht
Juhtimine Sellega kompileeritav leht või juhtelement
@Registreeri assamblee
Nimeruum
Src
TagName
TagPrefix Loob nimeruumide ja kohandatud juhtelementide varjunimed

Praegu vaatame lähemalt 2 neist - leht ja import.

Lehe direktiiv

Direktiiv Page võimaldab teil määrata lehe omadusi, mida kompileerimise ajal kasutatakse. Seda direktiivi kasutatakse sagedamini kui teisi, seega tuleb seda üksikasjalikumalt kaaluda.

Direktiivi olulisemad omadused on loetletud tabelis:

AutoEventWireup Lehe sündmuste automaatne käsitlemine
Puhver Juhib lehe puhverdamist. Puhverdatud vaikimisi
KlassiNimi Võimaldab määrata selle lehe loodud klassi nime
CodeFile Selle lehe koodi taga olev koodinimi
Kultuur Määrab piirkondlike valikute komplekti, s.t. keel, valuuta vorming, kuupäevad, numbrid
Silumine Kui see on tõsi, prinditakse lehele silumisteave
Jälg Jäljeteabe väljund
EnableViewState Lehe oleku salvestamine. See on vaikimisi salvestatud.
EnableTheming Võimaldab lubada või keelata nahatoe. Vaikimisi lubatud
Pärib Klass, kust selle lehe klass päritakse kooditaguses tehnoloogias
IsAsync Näitab, kas lehte töödeldakse asünkroonselt.
Keel Sisseehitatud koodis kasutatav keel
WarningLevel Kõrgeim lubatud koostaja hoiatustase
CompilerOptions Koostaja valikud

Klasside raamatukogu nimeruumid

FCL klassi raamatukogu sisaldab tuhandeid klasse. Kasutamise hõlbustamiseks ühendatakse need nimeruumideks. Nimeruumis deklareeritud klassidele viitamiseks ilma täielikku teed määramata tuleb see importida projekti. Kui soovite töötada XML -failidega, peate importima nimeruumi System.XML. C # kooditagused lehed kasutavad nagu alati kasutusdirektiivi.

süsteemi abil. XML;

Aspx lehel - impordidirektiiv

<%@ Import Namespace= "System.XML " %>

Iga nimeruum nõuab eraldi impordidirektiivi.

Visual Studio .NET ja VWD sisaldavad vaikimisi C # lehel kõige sagedamini kasutatavaid nimeruume. Te ei pea neid nimeruume aspx -lehele importima.

süsteemi kasutamine; kasutades System.Data; kasutades System.Configuration; kasutades System.Collections; kasutades System.Web; kasutades System.Web.Security; kasutades System.Web.UI; kasutades System.Web.UI.WebControls; kasutades System.Web.UI.WebControls.WebParts; kasutades System.Web.UI.HtmlControls;

Näiteks System.Web.UI nimeruum sisaldab klassi Page, ilma milleta ei saa eksisteerida ühtegi lehte ASP.NET; System.Web sisaldab HttpRequest ja HttpResponse.

Klassi vaataja

Kuidas sa tead, millised klassid on .NET -klassi raamatukogus? Selleks on ette nähtud objektibrauser (Visual Studio 2005) ja klassibrauseri WebMatrix. Objektide brauseri avamiseks Visual Studio 2005 või VWD Expressis valige menüü Vaade-> Objektibrauser. Kui kasutate WebMatrixit, asub klassibrauser samas Windowsi menüükaustas, kus asub WebMatrix - kõik programmid-> ASP.NET WebMatrix. ASP.NET -klassi brauser on raamistiku SDK -s.

Kõik saadaolevad nimeruumid kuvatakse puustruktuuri sõlmedena. Oleme huvitatud System.Webist. Laiendage seda sõlme. Sees olid teised nimeruumid. Laiendage System.Web.UI. Seal on suur hulk klasse, liideseid, delegaate, loendeid. Neid saab ära tunda nende ikoonide järgi. Näiteks näeb delegaadi ikoon välja nagu kohver.

- Klass

- liides

- sündmus

- loendamine

- meetod

Valige lehtklass. Paremal asuvas aknas kuvatakse selle meetodite, väljade ja sündmuste loend. Kui valite meetodi, kuvatakse selle kirjeldus teise all kolmandas aknas. Klassi sees on veel kaks kausta - põhiklassid ja järeltulija klassid. Kõiki neid saab ka vaadata. Objekti brauser näitab ka praeguse projekti klasse. Kui klassid on kommenteeritud XML -dokumentatsiooni genereerimise siltidega, on see teave ka nähtav, näiteks kokkuvõte, parameetrid, väärtused, tagastused.

Atribuudi IsPostBack uurimisel näete, et sellel on tõeväärtus ja see on kirjutuskaitstud.

Standarditele vastavuse kontrollimine

HTML -i ja XHTML -i jaoks on erinevad standardid. Hilisematel standarditel on rangemad nõuded, näiteks XHTML 1.1 ei luba seda kasutada
ja muud lihtsad sildid ilma kaldkriipsuta
... Samal ajal ei toeta vanad standardid uusi silte.

HTTP päringu päis määrab dokumendistandardi, Visual Studio 2005 määrab kõigil lehtedel järgmise standardi:

See standard nõuab märgendis atribuuti xmlns - lingid saidile koos standardi kirjeldusega.

Paljudel ASP.NET -i varasemate versioonide jaoks loodud lehtedel pole seda atribuuti. HTML-i allika redigeerimise tööriistariba sisaldab ka ripploendit, kus saate valida brauseri standardi või versiooni, mille jaoks see leht on mõeldud. Leht kontrollitakse automaatselt selle standardi järgi.
Lehe omadused

Leht on veebirakenduse kõige alus.

Klass System.Web.UI.Page sisaldab funktsioone, mis on vajalikud ASP.NET -lehtede loomiseks ja renderdamiseks.

Iga leht ASP.NET on klassi objekt, mille ASP.NET tuum automaatselt genereerib. Klass pärib lehega seotud klassilt, kui kasutame koodi taga, või pärib otse süsteemilt.Web.UI.Page, kui lehele on manustatud C # kood. Keskkond loob ka vaikekonstruktori.

Selle kinnitamiseks saame luua lehe „PageType.aspx”:

<%@ Page Language="C#" %> Lehe tüüp

<% Response.Output.Write("Тип данной страницы {0}",this.GetType()); %>
<% Response.Output.Write("Базовый тип данной страницы {0}",this.GetType().BaseType); %>

Siin on tulemus:


Selle lehe põhitüüp on System.Web.UI.Page

Sama leht on loodud koodide jagamise tehnoloogia abil.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PageType.aspx.cs" Inherits="PageType" %>

kirjutab tulemuse

Selle lehe tüüp on ASP.pagetype_aspx
Selle lehe põhitüüp on PageType

Asjaolu, et PageType pärib System.Web.UI.Page'i, on kirjutatud kooditaguses failis:

avalik osaline klass PageType: System.Web.UI.Page

Praegusele leheobjektile pääseb juurde muutujana Page. Leht on selle lehe juhtelementide konteiner, seega sisaldab see juhtnuppude kogumit. Kui silt Kui atribuut runat = “server” on olemas, sisaldab leht välja Päis, mille kaudu saate lehe pealkirja juhtida. Näiteks muutke brauseri päises lehe pealkirja, määrake kaskaadlaadilehe fail.

Tere ASP.NET

Õppige programmeerima ASP.NET -is

Selles näites oleme pealkirja teksti muutnud. Käivita see leht. Saadud HTML -is märgendi sees seal pole enam “Pealkirjata leht”, vaid “Uus pealkiri”, mis installiti saidi Page.Header.Title kaudu. Silt on kujundatud <p>Mis kajastus järgmiselt:</p> <p><style type="text/css"> p { color:Blue;background-color:Beige; } </style></p> <p>Väline CSS -leht imporditi failist.</p> <p><link href="printable.css" rel="stylesheet" type="text/css" /><style type="text/css"></p> <p>Если атрибут AutoEventWireup, который присутствует в заголовке страниц, генерируемых VS, установлен, то методы с префиксом Page_ автоматической назначаются обработчиками событий страницы.</p> <p>У страницы есть два важных свойства — Response и Request. Свойство Response имеет тип HttpResponse. Response страницы можно воспринимать как выходной поток. Весь HTML код генерируемой страницы в принципе может быть выведен через запись в этот поток. Это был обычный способ работы разработчиков asp. Но в ASP.NET есть более удобные средства вывода данных с помощью серверных элементов управления. Response лучше использовать для записи Cookies, для задания различных параметров заголовка – управлять кэшированием, свойством Expires.</p> <p>Вот пример из MSDN:</p> <p>HttpCookie MyCookie = new HttpCookie("LastVisit"); DateTime now = DateTime.Now; MyCookie.Value = now.ToString(); MyCookie.Expires = now.AddHours(1); Response.Cookies.Add(MyCookie);</p> <p>Можно поменять кодовую страницу.</p> <p><head runat="server"> <%Response.Charset = "windows-1251"; %> <title>Русская кодировка

Функция Response.Redirect перенаправляет браузер на другую страницу.

Response.Redirect("NavigationTarget.aspx?name=" + System.Web.HttpUtility.UrlEncode(Name.Text);

Здесь формируется командная строка с параметрами QueryString, которые целевая страница может прочитать.

Аналогично свойство Request – это запрос, переданный на сервер для вывода нужной страницы. Он имеет тип HttpRequest. В нем хранится все о клиенте, включая настройки его браузера, файлы-cookie и данные, введенные им в форму.

NameLabel.Text = Server.HtmlEncode(Request.QueryString["Name"]);

События страницы

Работа среды ASP.NET со страницей начинается с получения и обработки Web-сервером IIS запроса к данной странице и передачи этого запроса среде выполнения ASP.NET. Среда выполнения анализирует, нужно ли компилировать страницу или можно выдать в качестве ответа страницу из кэша.

Затем начинается жизненный цикл страницы. Он начинается с этапа PreInit. После получения запроса среда выполнения загружает класс вызываемой страницы, устанавливает свойства класса страницы, выстраивает дерево элементов, заполняет свойства Request и Response и свойства UICulture и вызывает метод IHttpHandler.ProcessRequest. После этого среда выполнения проверяет, каким образом была вызвана эта страница, и если страница вызвана путем передачи данных с другой страницы, о чем будет рассказано далее, то среда выполнения устанавливает свойство PreviousPage.

На этом этапе устанавливается также свойство IsPostback объекта Page, которое позволяет узнать, в первый ли раз загружается форма или она должна формироваться как результат обработки данных, введенных пользователем.

В обработчиках событий страницы можно проверить это свойство:

if (!Page.IsPostBack) { // обрабатывать }

Дальше происходит инициализация страницы – событие Init. Во времени инициализации страницы создаются дочерние пользовательские элементы управления и им установливаются свойства id. В это же время к странице применяются темы оформления. Если страница вызвана в результате постбэка, то на этом этапе данные, отправленные на сервер, еще не загружены в свойства элементов управления. Программист может инициализировать их свойства.

Если на странице существуют валидаторы(классы проверки данных, см. лекцию 5), то для них вызывается метод Validate(). Затем вызываются обработчики событий (при условии, что страница генерируется в ответ на действия пользователя).

В методе Render генерируется сам HTML-код выводимой страницы. При этом страница вызывает соответствующие методы дочерних элементов, те – методы своих дочерних элементов. В методе Render код выводится в Response.OutputStream. Сама страница тоже считается элементом управления – класс Page является наследником класса Control. Если на странице есть блоки отображения, они становятся частью функции отрисовки (rendering).

Наконец, страница выгружается из памяти сервера и происходит событие Unload.

Во время жизненного цикла страницы происходят различные события. Можно включить трассировку страницы, чтобы посмотреть порядок из возникновения.

<%@ Page Language="C#" Trace ="true" TraceMode="SortByTime" %>

Во время трассировки не выводится событие Unload, потому что оно происходит, когда весь код уже выведен. Во время обработки этого события нужно освободить ресурсы, например соединения с базами данных или открытые файлы.

Полный список событий страницы, которые можно переопределить в классе страницы:

* PreInit
* Init
* InitComplete
* PreLoad
* Load
* LoadComplete
* PreRender
* PreRenderComplete
* Unload

Для всех событий определены обработчики – виртуальные функции OnInit, OnLoad. Когда AutoEventWireup равно true, в классе автоматически объявляются функции-обработчики событий с префиксом Page — Page_Load, Page_Init и так далее. Одно из самых популярных событий – это Page_Load. Создавая новую страницу, Visual Studio создает обработчик этого события. Здесь можно изменить внешний вид элементов и создать новые. Можно установить AutoEventWireup в false. В таком случае надо писать перегруженные версии виртуальных функций.

protected override void OnInit(EventArgs e) { }

Так можно добиться ускорения работы страницы.
Способы внедрения кода ASP.NET в страницу.

Есть три способа внедрить код на программном языке в страницу aspx.

Блок называется блоком объявления кода.

Тег