Prikazivanje liste proizvoda. Neopoziva neopoziva

Do kraja ovog poglavlja mogli smo stvoriti model domene i spremište, a da nismo ni dodirnuli projekt korisničkog sučelja. Ali kako vam ne bi dosadilo, promijenit ćemo kurs i početi koristiti MVC Framework u potpunosti. Po potrebi ćemo dodati model i spremište novih karakteristika.

U ovom ćemo odjeljku stvoriti kontroler i metodu radnje koja će prikazivati ​​informacije o proizvodima u trgovini. Trenutno podatke imamo samo u simuliranoj memoriji, ali problem ćemo riješiti kasnije. Također ćemo obaviti početno podešavanje konfiguracija usmjeravanja tako da MVC zna kako preslikati zahtjeve na aplikaciju na kontroler koji ćemo stvoriti.

Dodajte kontroler

Desnom tipkom miša kliknite mapu Controllers u projektu SportsStore.WebUI i odaberite Add - Controller iz kontekstnog izbornika. Imenujte kontroler ProductController i pobrinite se da opcija Predložak sadrži Prazan kontroler. Kada Visual Studio otvori datoteku za uređivanje, možete ukloniti zadani metod radnje koji je automatski dodan i vaša će datoteka izgledati kao unos 7-6.

Spisak 7-6: Početna definicija ProductControllera
pomoću sistema; pomoću System.Collections.Generic; pomoću System.Linq; koristeći System.Web; pomoću System.Web.Mvc; pomoću SportsStore.Domain.Abstract; pomoću SportsStore.Domain.Entities; namespace SportsStore.WebUI.Controllers (javna klasa ProductController: Controller (privatno spremište IProductRepository; javno ProductController (IProductRepository productRepository) (this.repository = productRepository;)))

Uklanjanjem metode akcije Index dodajemo konstruktor koji uzima parametar IProductRepository. To će omogućiti Ninjectu da ubrizga ovisnost o skladištu proizvoda kada pokrene klasu kontrolera. Uvezli smo i prostore imena SportsStore.Domain kako bismo mogli pristupiti trgovinama i klasama modela bez navođenja njihovih imena.

List 7-7: Dodavanje metode akcije
pomoću sistema; pomoću System.Collections.Generic; pomoću System.Linq; koristeći System.Web; pomoću System.Web.Mvc; pomoću SportsStore.Domain.Abstract; pomoću SportsStore.Domain.Entities; namespace SportsStore.WebUI.Controllers (javna klasa ProductController: Controller (privatno spremište IProductRepository; javno ProductController (IProductRepository productRepository) (this.repository = productRepository;) javni ViewResult List () (povratak View (repository.Products);) } }

Ovaj poziv metode View (bez navođenja imena pogleda) govori okviru da generira zadani prikaz za zadanu metodu akcije. Prosljeđivanjem liste objekata proizvoda metodi View, pružamo okviru podatke za popunjavanje objekta Model u strogo tipiziranom prikazu.

Dodavanje pogleda

Sada moramo dodati zadani prikaz za metodu akcije List. Desnom tipkom miša kliknite metodu Popis u uređivaču koda i odaberite Dodaj - Pogled iz kontekstnog izbornika. Imenujte listu prikaza i označite okvir koji kreira jako otkucane poglede, kao što je prikazano na slici 7-5.

Slika 7-5: Dodavanje prikaza liste

U polje klase Model unesite IEnumerable ... Morat ćete otkucati ovaj naslov; neće biti dostupan sa padajućeg popisa koji ne uključuje nabrajanje objekata domene.

U nastavku ćemo koristiti standardni Razor izgled koji je uključen u osnovni predložak projekta kako bismo održali svoje stavove dosljednima. Označite potvrdni okvir Koristi raspored, ali tekstni okvir ostavite praznim kao što je prikazano. Kliknite gumb Dodaj da biste kreirali prikaz.

Vizualizacija podataka prikaza

Znajući da je model u prikazu nebrojan Spisak možemo stvoriti pomoću petlje Razor foreach, kao što je prikazano na popisu 7-8.

Spisak 7-8: List.cshtml prikaz
@model IEnumerable @ (ViewBag.Title = "(! LANG: Proizvodi"; } !} @foreach (var p u modelu) (

@ p.Name

@ p.Opis

@ p.Price.ToString ("c")

}

Promijenili smo i naslov stranice. Imajte na umu da za prikaz podataka prikaza ne trebamo koristiti tekst Razor ili elemente @:, jer je svaki redak u tijelu koda ili direktiva Razora ili započinje HTML elementom.

Savet

Imajte na umu da smo svojstvo Price pretvorili u niz metodom ToString ("c"), koja prikazuje numeričke vrijednosti kao valutu prema postavci kulture na vašem serveru. Na primjer, ako je poslužitelj konfiguriran kao en-US, tada će (1002.3) .ToString ("c") vratiti 1.002,30 USD, ali ako je poslužitelj konfiguriran kao en-GB, ista metoda će vratiti 1.002,30 £. Postavku kulture za svoj poslužitelj možete promijeniti dodavanjem čvora datoteke Web.config u sljedećem odjeljku: .

Konfiguriranje zadane rute

Za sada samo moramo reći MVC platformi da zahtjevi koji dolaze do korijena web lokacije (http: // mysite /) moraju biti mapirani u metodu akcije Lista klase ProductController. Da bismo to učinili, uređujemo izjavu u metodi RegisterRoutes u datoteci App_Start / RouteConfig.cs, kao što je prikazano na popisu 7-9.

Spisak 7-9: Dodavanje zadane rute
pomoću sistema; pomoću System.Collections.Generic; pomoću System.Linq; koristeći System.Web; pomoću System.Web.Mvc; koristeći System.Web.Routing; namespace SportsStore.WebUI (javna klasa RouteConfig (javna statička praznina RegisterRoutes (RouteCollection routes) (routes.IgnoreRoute ("(resource) .axd / (* pathInfo)"); routes.MapRoute (name: "Default", url: "( kontroler) / (akcija) / (id) ", zadane vrijednosti: novo (kontroler =" Proizvod ", akcija =" Lista ", id = UrlParameter.Obavezno));)))

Promijenite Početna na Proizvod i Indeks na Spisak kao što je prikazano na popisu. Detaljnije ćemo govoriti o mogućnostima usmjeravanja ASP.NET-a u poglavlju 13. Za sada je dovoljno znati da će ova promjena prema zadanim postavkama usmjeriti zahtjeve za URL-ovima na način akcije koji smo definirali.

Savet

Primijetite da smo u Popisu 7-9 postavili kontroler na Product, a ne ProductController, što je naziv klase. Ovo je dio sheme imenovanja ASP.NET MVC u kojoj se imena klasa kontrolera uvijek završavaju na Controller, a ovaj dio imena izostavljen je kada se odnosi na klasu.

Pokretanje aplikacije

Sve osnovne komponente aplikacije su spremne. Imamo kontroler s metodom akcije koji se poziva kada se zatraži zadani URL. Ova metoda akcije oslanja se na izrugivanu implementaciju našeg sučelja trgovine koja generira jednostavne testne podatke. Podaci o testiranju prenose se na prikaz koji smo povezali s metodom akcije i kreira jednostavnu listu s informacijama za svaki proizvod. Ako pokrenete aplikaciju, vidjet ćete rezultat prikazan na slici 7-6.

Slika 7-6: Pregled osnovne funkcionalnosti aplikacije

Ovo je tipičan obrazac razvoja za ASP.NET MVC okvir. Posvećujemo dosta vremena prilagodbi, ali tada se razvoj osnovne funkcionalnosti aplikacije događa vrlo brzo.

U redu, tako da sam nov u cijelom svijetu MVC-a, ali čini se da je ovo vrlo dobar način da se stvari urade i pokušavam natjerati da to funkcionira ovdje.

Problem je sljedeći: ne mogu dobiti podatke iz svoje tablice u svojoj SQL bazi podataka u jednostavan padajući obrazac na mojoj stranici za registraciju.

Jednostavno nemam pojma gdje staviti materijal, gdje je kôd za otvaranje tablice, odabrati identifikatore, gdje staviti response.write i kako ga poslati u prikaz?

Moj model je ovakav:

Korisnici javne klase (ime javnog niza (get; set;) public int user_id (get; set;))

Public ActionResult ListUser () (return View ();)

A moj pogled je sljedeći:

@model Community.Models.users

Guglao sam 2 dana i gledao nekoliko video zapisa na youtubeu, ali bezuspješno, ne mogu ga pronaći. Molim vas, neko sa nekim znanjem ovdje? I molim vas, dajte mi dobre upute i / ili forume na kojima mogu pronaći još pitanja

Još uvijek nema sreće na ovom projektu.

Stvaram obrazac i u ovom obliku želim db-petlju (IEnumerable). Ali trenutni model nije nebrojan. Skoro sam zapeo gledajući gomilu vodiča i svi oni navode samo jednu vezu, ali što ako trebam dva modela?

Evo mog kontrolera, pretpostavio sam da morate proslijediti listu na pregled, zar ne?

Registracija Public ActionResult () (povratak View (db.users.ToList ());)

Kako mogu doći do ovog popisa bez mog broja IEnumerable?

@neoistheone tvoj primjer mi nije puno pomogao, moj db se otvara ovako:

Privatni DataBaseContext db = novi DataBaseContext ();

i ne znam kako to učiniti, ali to otvara vezu. Pokušavala sam toliko sati, baš glupo, nisam dugo spavala!

Koristim ASP-Classic fyi programiranje i ovo je moj prvi ozbiljni pokušaj da osvježim svoje znanje o modernom programiranju jezika i OOP-u.

6 odgovora

Dodajte SelectList na svoj model:

Javna SelectList DropDownList (get; set;)

izgradite klasu za ovu kolekciju:

Javna klasa MyListTable (javni niz ključa (get; set;) javni niz Display (get; set;))

a zatim u svoj kontroler učitajte podatke iz klase MyListTable iz baze podataka:

Var lista = nova lista (); pomoću (SqlConnection c = new SqlConnection (cString)) koristeći (SqlCommand cmd = new SqlCommand ("SELECT KeyField, DisplayField FROM Table", c)) (using (SqlDataReader rdr = cmd.ExecuteReader ()) (while (rdr.Reader) )) (list.Add (new MyListTable (Key = rdr.GetString (0), Display = rdr.GetString (1)));))) var model = novi korisnici (); model.DropDownList = novi SelectList (lista, "Ključ", "Prikaz");

i onda napokon trebate poslati svoj model na prikaz:

Povratak Pogled (model);

Sada u Razoru možete prikazati ovo:

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

Te stvari naravno možete nazvati boljim imenima, ali shvaćate.

Već postoje izvrsni odgovori, ali evo još jednog pristupa.

Korisit ćete korisnika kao model, ListUserViewModel kao model prikaza i UserController kao kontroler. Zadatak modela pregleda je prenositi sve informacije potrebne za prikaz na stranici iz kontrolera bez dodavanja neželjenih svojstava u klasu modela. Na popisu obaveza vašeg korisnika iz baze podataka na padajućem popisu.

Javna klasa Korisnik // Inače prilikom imenovanja klase koristite singular (ime javnog niza (get; set;) public int user_id (get; set;))

Pogled-model

Javna klasa ListUserViewModel (javna lista Korisnici (get; set;))

kontroler

Javna klasa UserController: Controller (private DataBaseContext db = new DataBaseContext (); public ActionResult ListUser () (var users = db.Users.ToList (); var viewModel = new ListUserViewModel (Users = users); return View (viewModel);) )

Sada u svom prikazu kao model koristite ListUserViewModel umjesto User

@model Community.Models.ListUserViewModel

i padajući meni

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

Objašnjenje:

Stvarate padajući meni za korisnike s Model.Users kao izvorom podataka liste sa liste. "user_id" kao vrijednost odabranog korisnika i "name" kao oznaka prikaza. posljednji argument (stavio sam prazan niz "") je zadana vrijednost da će padajući izbornik biti prikazan prije izbora.

Nadam se da ovo pomaže vama ili nekome drugom.

Probaj,

Javni niz CoutryID (get; set;) javna lista CountryList (get; set;)

Metoda kontrolera koja popunjava listu

Javna lista getCountryList () (pomoću (QRMG_VendorPortalDataContext _context = new QRMG_VendorPortalDataContext ()) (return (from c in _context.Countries where c.IsDeleted == false select c) .ToList ();))

Prikaz padajuće liste

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

ovo je moja tabela u bazi podataka

Pogledajte moj kontroler akcije

// GET: Pisma javni ActionResult Index () (ViewBag.LetterStatus = new SelectList (LetterStatusService.GetAllLettersStatus (), "Id", (CultureHelper.GetCurrentCulture () == "ar")? "NameArabic": "Name", zahtjev) .QueryString ["LetterStatus"]); return View ();)

i u pogledu

@ Html.DropDownList ("LetterStatus")

konstruktor koji koristim

Nova SelectList (lista myListFromDatabase, niz PropertyNameOfValueInHtml, niz PropertyNameOfDesplayInHtml, niz SelectedItemValue);

ovaj Request.QueryString ["LetterStatus"] jer odabrane stavke šaljem u QuerySrting

i na osnovu CurrentCulture izabrao sam koji ću stupac prikazati

i rezultat

ali mislim da je najbolji način da to učinite: - preuzmite ili kreirajte Elemente, a zatim Iterate da biste ih prebacili kako biste ručno generirali oznaku za odabir. Ovaj pristup sam dobro opisao u

25.11.2006 12,7K

Uvod

ASP.NET je jedna od komponenti .NET Framework-a. Dopustimo nam ukratko glavne karakteristike ove tehnologije.

* Uobičajeni jezik CLR
* Biblioteka klasa .NET Framework
* .NET jezici (C #, VB.NET, J # i drugi)
* ADO.NET
* ASP.NET
* Web usluge
* Srednji jezik MSIL (Microsoft Intermediate Language). To je asembler za CLR runtime.

ADO.NET je skup klasa za pristup bazama podataka Microsoft SQL Server, izvorima podataka OLEDB i XML datotekama.

Različiti dijelovi vašeg projekta mogu biti napisani na različitim jezicima, to se naziva interoperabilnost. Pokušat ćemo napisati projekt gdje će jedna stranica biti u Visual Basicu, a druga u C #.

Kompjuterski jezici se sastavljaju i tumače. U procesu kompajliranja programa napisanog na kompajliranom jeziku stvara se izvršna datoteka (u operativnom sistemu Windows - exe). Radi brzo, ali ne može raditi na drugoj platformi. Mašina na kojoj radi mora imati sličnu konfiguraciju. Na primjer, ako program koristi dll, tada se i ova biblioteka mora instalirati na ciljnom stroju. Interpretirani programi kompajliraju se tokom izvođenja, tako da rade sporije, ali nisu specifični za mašinu. U NET Framework-u koristi se kompilacija u dva koraka, to jest, prvi korak je kompilacija u MSIL, a drugi je pravovremena kompilacija od strane kompajlera za vrijeme izvođenja. JIT kompajler optimizira kôd za mašinu na kojoj se izvršava. U ASP.NET-u se stranica kompajlira u MSIL prvi put kada klijent pristupi stranici. Klase koje koristi sastavljaju se zajedno s njom. Ako koristite Visual Studio 2005, umjesto da čekate prvi zahtjev, možete prisiliti sve stranice u vašem projektu da se kompajliraju. To će vam omogućiti da prepoznate sintaksu i druge greške.

MSIL je strojno neovisni montažer. Može se pokretati na bilo kojoj mašini na kojoj je instaliran CLR. Mono projekt pokušava CLR prebaciti na druge platforme, omogućavajući komunikaciju serverima koji rade na različitim platformama.

Sa projektom se možete upoznati na web stranici http://mono-project.com

Stranica http://go-mono.com/archive/xsp-0.10.html sadrži XSP - ASP.NET server, koji može poslužiti kao produžetak Apache servera - glavnog servera * nix - sistema.

Kako ASP.NET radi

Kada instaliramo .NET, datoteka aspnet_isapi.dll se također postavlja u odgovarajuće direktorijume C: WINDOWSMicrosoft.NETFramework. Ovo je ISAPI proširenje za primanje zahtjeva za ASP.NET aplikacije (* .aspx * .asmx, itd.) I za stvaranje radnih procesa aspnet_wp.exe za obradu zahtjeva. Internet server - ili IIS ugrađen u WebMatrix ili ugrađen u Visual Studio Cassini - koristi ovo proširenje kada treba da obrađuje pristup stranicama sa ekstenzijom aspx.

Ovaj modul raščlanjuje sadržaj aspx stranica zajedno s datotekom s kodom i generira klasu jezika stranice s objektom Page. Aspx stranica razlikuje se od uobičajene HTML stranice prisutnošću kontrola poslužitelja, koje su opisane posebnim oznakama. Da biste razumjeli kako ASP.NET radi, važno je napomenuti da svaka kontrolna oznaka ima odgovarajućeg člana klase stranice. Na primjer,

pretvoreno u

@__ctrl = novi globalni :: System.Web.UI.WebControls.Label ();

Glavni zadatak objekta Page je slanje HTML koda u izlazni tok. Ova klasa je kompajlirana u dll, koji se učitava u proces web poslužitelja. Naknadnim zahtjevima za stranicu također se bavi dll ako se izvorni kod stranice ne promijeni. Sve ove datoteke mogu se naći u privremenom direktorijumu ASP.NET datoteka trenutne verzije .NET-a. Ako radimo u razvojnom okruženju Visual Studio 2005 ili VWD, poddirektorij se kreira za svaki projekat.

Tipovi projektnih stranica i mapa

Nove datoteke se mogu dodati u projekt putem dijaloga Nova datoteka. Ako poništite potvrdni okvir "Smjesti kôd u zasebnu datoteku", Visual Studio kreira jednu datoteku koja sadrži i stranicu i kôd za njezinu obradu (u stilu WebMatrix).

Sve datoteke su smještene u direktorij projekta. Suprotno tome, sve datoteke koje su smještene u direktorij projekta postat će dio njega. Ne postoji posebna .csproj datoteka za web lokacije koja navodi njene sastavne dijelove, kao što je to bio slučaj u prethodnim verzijama Visual Studija. Struktura rješenja opisana je u tekstualnoj datoteci.sln. Rješenje može uključivati ​​više web stranica i biblioteka.

ASP.NET 2.0 ima posebne poddirektoriju projekata za različite tipove datoteka. Na primjer, mapa App_Code sadrži javne klase, tekstualne datoteke i neke druge (DataSet, dijagram klase). Datoteke s pronađenim ekstenzijama .cs ili .vb automatski se kompajliraju kad se zatraži bilo koja stranica projekta. App_Data sadrži izvore podataka koji se koriste u projektu - Access i Microsoft SQL baze podataka, XML datoteke. Ovom se direktoriju ne može pristupiti izvana, već samo iz same aplikacije. Mapa Teme sadrži teme projekata (poglavlje 13). Primjena tema omogućava vam prilagodbu i upravljanje dosljednim izgledom i osjećajem vaše web lokacije. App_GlobalResources sadrži resurse, poput tablica nizova, koje možete stvoriti na različitim jezicima. Jezik resursa bira se automatski, ovisno o korisnikovim postavkama preglednika. Mapa App_WebReferences sadrži veze do korištenih web usluga.

Možete kreirati vlastite poddirektorijume projekata, na primjer, za pohranu slika.

Projekt na 2 jezika

Projekt web stranice sastoji se od aspx stranica i klasa koje te stranice koriste (i, naravno, raznih izvora). Datoteke s klasama, kojima se može pristupiti s različitih stranica, smještaju se u posebnu mapu App_Code. Kada se prevode, smještaju se u jedan sklop - dll biblioteku u prijenosni izvršni format. Nije važno na kojem jeziku je klasa napisana, sve dok je to .NET jezik.

Gotovi kompajlirani sklopovi nezavisnih proizvođača takođe se mogu koristiti u projektu. Smještaju se u mapu Bin. Međutim, oni se moraju uvesti u projekt.

<%@ Import Namespace="MyCustomNamespace" %>

Kreirajte novi projekat. Dodajte joj datoteku odabirom vrste datoteke Class i jezika Visual Basic. Sama okolina će ponuditi da ga smjestite u mapu Code. Nazovimo ga CustomClass. Imat će vrlo jednostavan kod. Samo jedna funkcija koja dodaje riječ Zdravo imenu dodanom kao parametar.

Uvozi javnu klasu Microsoft.VisualBasic Public Class CustomClass javnu funkciju GetMessage (ime ByVal Kao niz) Kao niz Vrati "Zdravo" i ime Kraj funkcije Krajnja klasa

Dodajte stranicu CodeFolder_cs.aspx u svoj projekt. Ova stranica je napisana na jeziku C #, ali kreira klasu napisanu u VB.NET.

<%@ page language="C#" %> ASP.NET unutarnje stranice

Dobrodošli u ASP.NET 2.0!

Unesite svoje ime:

Stranica definira obrazac koji sliči na obrazac aplikacije Windows. Na njemu se nalazi dugme, klikom na koje se obrađuje funkcija Button1_Click. Stvara klasu i poziva svoju funkciju GetMessage s parametrom koji je preuzet iz kontrole uređivanja. Povratna vrijednost upisuje se u element Label1. U jednostavnijoj verziji to izgleda ovako:

Label1.Text = "Zdravo" + TextBox1.Text;

Predmet se može napisati na jeziku C # i koristiti sa stranice u Visual Basicu.

pomoću sistema; javna klasa CustomClass2 (javni String GetMessage (String input) (vrati "Hello from C #" + input;)) CodeFolder_vb.aspx kôd stranice:

Međutim, u direktorij App_Code može se smjestiti samo jedan jezik. Ako postoje datoteke na različitim jezicima, projekt se neće kompajlirati. Da biste koristili dva jezika, morate stvoriti poddirektorij, dodati ga u datoteku web.config i u njega staviti datoteke na drugom jeziku.

Registracija u datoteci web.config:

... ...

Direktive

Svaka aspx stranica obično sadrži smjernice pomoću kojih možete kontrolirati ponašanje stranice. Možete ih smatrati jezikom kojim komunicirate s kompajlerom, govoreći mu kako se rukuje datom stranicom. Direktive se obično stavljaju na početak datoteke. Direktivu Page već smo upoznali na prvom predavanju.

Sintaksa za deklaraciju direktiva je sljedeća:

<%@ %>

Možete prijaviti nekoliko direktiva istovremeno:

<%@ %>

U ASP.NET 2.0 postoji 11 direktiva.
Opis svojstava direktive
@ Ime sklopa
Src uvozi sklop s navedenim imenom na stranicu ili u kontrolu.
@Control je isto što i Stranica. Koristi se za postavljanje svojstava prilikom kreiranja vlastitih prilagođenih kontrola.
@Implements Interface Označava da klasa ove stranice implementira dati interfejs
@Import Space Names Uvozi prostor imena
@Master je isto što i Stranica. Primjenjuje se na stranice predloška dizajna (glavna stranica). Novo u ASP.NET 2.0
@MasterType TypeName
VirtualPath daje snažno otkucane reference na klasu sadržanu u predlošku dizajna. Omogućava vam pristup svojstvima ove klase.
@OutputCache Duration
Lokacija
VaryByCustom
VaryByHeader
VaryByParam
VaryByControl Kontrolira stranicu ili kontrolira predmemoriranje. Ovo je detaljnije opisano u predavanju 15.
@Page pogledajte dolje Atributi povezani sa ovom stranicom. Koristi se samo u datotekama s ekstenzijom aspx
@PreviousPageType TypeName
VirtualPath Poslana je stranica s koje je korisnik unio podatke. Novo u ASP.NET 2.0. Prije su stranice samo sebi slale post.
@Reference Page
Kontrola Stranica ili kontrola koja će se sastaviti s ovim
@Register Assembly
Prostor imena
Src
TagName
TagPrefix Stvara pseudonime za prostore imena i prilagođene kontrole

Za sada, pogledajmo pobliže 2 od njih - stranicu i uvoz.

Direktiva stranice

Direktiva Page omogućava vam postavljanje svojstava stranice koja će se koristiti u vrijeme kompajliranja. Ova se direktiva koristi češće od ostalih, pa je treba razmotriti detaljnije.

U tablici su navedeni najvažniji atributi direktive:

AutoEventWireup Automatsko rukovanje događajima na stranici
Pufer Kontrolira međuspremnik stranice. Podrazumevano bafer
Ime klase Omogućava vam da dodijelite ime klase koju generira ova stranica
CodeFile Naziv datoteke s kodom iza ove stranice
Kultura Postavlja skup regionalnih opcija, tj. jezik, format valute, datumi, brojevi
Otklanjanje grešaka Ako je tačno, na stranici se ispisuju informacije o otklanjanju pogrešaka
Trag Izlaz podataka o tragovima
EnableViewState Spremanje stanja stranice. Po defaultu je spremljeno.
EnableTheming Omogućava vam da omogućite ili onemogućite podršku za kožu. Omogućeno prema zadanim postavkama
Nasljeđuje Klasa iz koje se nasljeđuje klasa ove stranice u tehnologiji koja zaostaje za kodom
IsAsync Označava da li se stranica obrađuje asinhrono.
Jezik Jezik koji se koristi u ugrađenom kodu
WarningLevel Najviši dozvoljeni nivo upozorenja kompajlera
CompilerOptions Opcije kompajlera

Prostori imena knjižnice klasa

Biblioteka klasa FCL sadrži hiljade predavanja. Radi lakše upotrebe, kombiniraju se u prostore imena. Da bi se pozivao na klase deklarirane u prostoru imena bez navođenja pune staze, mora se uvesti u projekt. Ako želite raditi s XML datotekama, morate uvesti prostor imena System.XML. Stranice s kodom C #, kao i uvijek, koriste naredbu using.

koristeći System. XML;

Na aspx stranici - Direktiva o uvozu

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

Svaki prostor imena zahtijeva zasebnu direktivu o uvozu.

Visual Studio .NET i VWD podrazumevano uključuju najčešće korištene prostore imena na stranici C #. Ne morate uvoziti ove prostore imena na aspx stranicu.

pomoću sistema; pomoću System.Data; pomoću System.Configuration; koristeći System.Collections; koristeći System.Web; pomoću System.Web.Security; koristeći System.Web.UI; pomoću System.Web.UI.WebControls; pomoću System.Web.UI.WebControls.WebParts; pomoću System.Web.UI.HtmlControls;

Na primjer, prostor imena System.Web.UI sadrži klasu Page, bez koje ne može postojati nijedna ASP.NET stranica; System.Web sadrži HttpRequest i HttpResponse.

Class Viewer

Kako znati koje su klase u .NET biblioteci klasa? Preglednik predmeta (Visual Studio 2005) i Preglednik klasa WebMatrix su namijenjeni tome. Da biste otvorili Object Browser u Visual Studio 2005 ili VWD Express, odaberite stavku View-> Object Browser. Ako koristite WebMatrix, tada se Preglednik klasa nalazi u istoj fascikli Windows menija kao i WebMatrix - Svi programi-> ASP.NET WebMatrix. Preglednik klasa ASP.NET uključen je u Framework SDK.

Svi dostupni prostori imena prikazani su kao čvorovi u strukturi stabla. Zanima nas System.Web. Proširite ovaj čvor. Unutra su bili i drugi imenski prostori. Proširite System.Web.UI. Postoji veliki broj klasa, sučelja, delegata, nabrajanja. Prepoznaju se po ikonama. Na primjer, ikona delegata izgleda poput kofera.

- Razred

- interfejs

- događaj

- nabrajanje

- metoda

Odaberite klasu Page. Spisak metoda, polja i događaja pojavit će se u prozoru s desne strane. Ako odaberete metodu, njen opis će se pojaviti u trećem prozoru ispod drugog. Unutar klase postoje još dvije mape - Osnovne klase i klase potomaka. Svi oni se takođe mogu pogledati. Preglednik objekata takođe prikazuje klase trenutnog projekta. Ako se klase komentiraju s oznakama za generiranje XML dokumentacije, tada su i ove informacije vidljive, na primjer, Sažetak, Parametri, Vrijednosti, Povrati.

Ispitivanjem svojstva IsPostBack možete vidjeti da ima logičku vrijednost i da je samo za čitanje.

Provjera usklađenosti sa standardima

Postoje različiti standardi za HTML i XHTML. Kasniji standardi imaju strože zahtjeve, na primjer, XHTML 1.1 ne dozvoljava upotrebu
i ostale jednostavne oznake bez kose crte
... Istovremeno, stari standardi ne podržavaju nove oznake.

Zaglavlje HTTP zahtjeva navodi standard dokumenta, Visual Studio 2005 navodi sljedeći standard na svim stranicama:

Ovaj standard zahtijeva atribut xmlns u oznaci - veze do web mjesta s opisom standarda.

Mnoge stranice napravljene za prethodne verzije ASP.NET-a nemaju ovaj atribut. Alatna traka Html Source Editing također sadrži padajući popis na kojem možete odabrati standard ili verziju preglednika kojem je ova stranica namijenjena. Stranica se automatski provjerava prema ovom standardu.
Svojstva stranice

Stranica je temelj svega u web aplikaciji.

Klasa System.Web.UI.Page obuhvaća funkcionalnost potrebnu za stvaranje i prikaz ASP.NET stranica.

Svaka ASP.NET stranica objekt je klase koji automatski generira ASP.NET jezgra. Klasa nasljeđuje klasu pridruženu stranici ako koristimo zaostali kod ili izravno nasljeđuje System.Web.UI.Page ako je C # kôd ugrađen u stranicu. Okruženje također stvara zadani konstruktor.

Da bismo to provjerili, možemo stvoriti stranicu “PageType.aspx”:

<%@ Page Language="C#" %> Tip stranice

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

Evo rezultata:


Osnovni tip ove stranice je System.Web.UI.Page

Ista stranica kreirana pomoću tehnologije podjele koda.

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

zapisuje rezultat

Tip ove stranice je ASP.pagetype_aspx
Osnovni tip ove stranice je PageType

Činjenica da PageType nasljeđuje od System.Web.UI.Page zapisana je u datoteci sa kodom:

javna djelomična klasa PageType: System.Web.UI.Page

Trenutnom objektu stranice može se pristupiti kao varijabli Page. Stranica je spremnik kontrola za ovu stranicu, stoga sadrži zbirku kontrola. Ako je oznaka Ako je prisutan atribut runat = “server”, Stranica sadrži polje Zaglavlje kroz koje možete kontrolirati naslov stranice. Na primjer, promijenite naslov stranice u zaglavlju preglednika, dodijelite kaskadnu datoteku stilskog lista.

Pozdrav ASP.NET

Naučite programirati na ASP.NET-u

U ovom smo primjeru promijenili tekst naslova. Pokreni ovu stranicu. U rezultirajućem HTML-u, unutar oznake više ne postoji „Stranica bez naslova“, već „Novi naslov“, koja je instalirana putem stranice Page.Header.Title. Oznaka je stilizirana <p>Što se odrazilo na ovaj način:</p> <p><style type="text/css"> p { color:Blue;background-color:Beige; } </style></p> <p>Vanjska CSS stranica uvezena je iz datoteke.</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.

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

Тег