Afișarea unei liste de produse. Irevocabilitate irevocabilă

Până la sfârșitul acestui capitol, am putea crea un model de domeniu și un depozit fără a atinge nici măcar proiectul UI. Dar pentru a nu vă plictisi, vom schimba cursul și vom începe să folosim MVC Framework la maximum. Vom adăuga noi caracteristici modelului și depozitului, după cum este necesar.

În această secțiune, vom crea un controler și o metodă de acțiune care va afișa informații despre produsele din magazin. În acest moment, avem doar date stocate în mod simulat, dar vom aborda această problemă mai târziu. Vom face, de asemenea, configurarea inițială. configurația de rutare astfel încât MVC să știe cum să mapeze cererile către aplicație la controlerul pe care urmează să îl creăm.

Adăugați un controler

Faceți clic dreapta pe folderul Controlere din proiectul SportsStore.WebUI și selectați Adăugare - Controler din meniul contextual. Denumiți controlerul ProductController și asigurați-vă că opțiunea Șablon conține controler gol. Când Visual Studio deschide fișierul pentru editare, puteți elimina metoda implicită de acțiune care a fost adăugată automat, iar fișierul dvs. va arăta ca Listarea 7-6.

Listarea 7-6: Definiția inițială a ProductController
utilizarea sistemului; folosind System.Collections.Generic; folosind System.Linq; folosind System.Web; folosind System.Web.Mvc; folosind SportsStore.Domain.Abstract; folosind SportsStore.Domain.Entities; namespace SportsStore.WebUI.Controllers (clasa publică ProductController: Controller (depozit privat IProductRepository; public ProductController (IProductRepository productRepository) (this.repository = productRepository;)))

Eliminând metoda de acțiune Index, adăugăm un constructor care ia un parametru IProductRepository. Acest lucru va permite Ninject să injecteze dependența magazinului de produse atunci când instanțiază clasa controlerului. De asemenea, am importat spațiile de nume SportsStore.Domain, astfel încât să putem accesa magazinul și clasele de modele fără a le specifica numele.

Listarea 7-7: Adăugarea unei metode de acțiune
utilizarea sistemului; folosind System.Collections.Generic; folosind System.Linq; folosind System.Web; folosind System.Web.Mvc; folosind SportsStore.Domain.Abstract; folosind SportsStore.Domain.Entities; namespace SportsStore.WebUI.Controllers (clasa publică ProductController: Controller (depozit privat IProductRepository; public ProductController (IProductRepository productRepository)) (this.repository = productRepository;) public ViewResult List () (return View (repository.Products);) } }

Acest apel către metoda Vizualizare (fără a specifica un nume de vizualizare) îi spune cadrului să redea vizualizarea implicită pentru metoda de acțiune dată. Trecând o Listă de obiecte Produs la metoda Vizualizare, oferim cadrului date pentru a completa obiectul Model într-o vizualizare puternic tastată.

Adăugarea unei vizualizări

Acum trebuie să adăugăm o vizualizare implicită pentru metoda de acțiune Listă. Faceți clic dreapta pe metoda Listă din editorul de cod și alegeți Adăugare - Vizualizare din meniul contextual. Denumiți lista de vizualizări și bifați caseta care creează vizualizări puternic tastate, așa cum se arată în Figura 7-5.

Figura 7-5: Adăugarea unei vizualizări de listă

În câmpul clasei Model, introduceți IEnumerable ... Va trebui să tastați acest titlu; nu va fi disponibil dintr-o listă derulantă care nu include enumerarea obiectelor de domeniu.

În cele ce urmează, vom folosi aspectul standard Razor care este inclus în șablonul de proiect Basic pentru a ne menține opiniile coerente. Bifați caseta de lângă Utilizați un aspect, dar lăsați caseta de text necompletată așa cum se arată. Faceți clic pe butonul Adăugați pentru a crea vizualizarea.

Vizualizarea datelor de vizualizare

Știind că modelul din vedere este IEnumerabil Putem crea o listă folosind o buclă Razor foreach, așa cum se arată în Listarea 7-8.

Listarea 7-8: Vizualizare List.cshtml
@model IEnumerable @ (ViewBag.Title = "(! LANG: Produse"; } !} @foreach (var p în Model) (

@ p.Nume

@ p. Descriere

@ p.Price.ToString („c”)

}

De asemenea, am schimbat titlul paginii. Rețineți că nu este necesar să folosim text Razor sau @: elemente pentru a afișa datele de vizualizare, deoarece fiecare linie din corpul codului este fie o directivă Razor, fie începe cu un element HTML.

Sfat

Rețineți că am convertit proprietatea Price într-un șir folosind metoda ToString ("c"), care afișează valorile numerice ca monedă în funcție de setarea culturii din serverul dvs. De exemplu, dacă serverul este configurat ca en-US, atunci (1002.3). ToString („c”) va returna 1,002,30 USD, dar dacă serverul este configurat ca en-GB, aceeași metodă va returna 1,002,30 GBP. Puteți modifica setarea de cultură pentru serverul dvs. adăugând la nod din fișierul Web.config următoarea secțiune: .

Configurarea rutei implicite

Deocamdată, trebuie doar să spunem platformei MVC că solicitările care vin la rădăcina site-ului (http: // mysite /) trebuie mapate la metoda de acțiune List din clasa ProductController. Pentru a face acest lucru, edităm declarația din metoda RegisterRoutes din fișierul App_Start / RouteConfig.cs, așa cum se arată în Listarea 7-9.

Listarea 7-9: Adăugarea unui traseu implicit
utilizarea sistemului; folosind System.Collections.Generic; folosind System.Linq; folosind System.Web; folosind System.Web.Mvc; folosind System.Web.Routing; namespace SportsStore.WebUI (public class RouteConfig (public static void RegisterRoutes (RouteCollection routes) (routes.IgnoreRoute ("(resource) .axd / (* pathInfo)"); routes.MapRoute (nume: "Implicit", url: "( controller) / (action) / (id) ", implicit: new (controller =" Produs ", action =" List ", id = UrlParameter.Optional));)))

Schimbați pagina de pornire la produs și indexați la listă, așa cum se arată în listă. Vom intra în mai multe detalii despre capacitățile de rutare ASP.NET în capitolul 13. Deocamdată, este suficient să știm că această modificare va direcționa cererile de adrese URL în mod implicit la metoda de acțiune pe care am definit-o.

Sfat

Observați că în Listarea 7-9, setăm controlerul la Produs, nu la ProductController, care este numele clasei. Aceasta face parte din schema de denumire ASP.NET MVC în care numele claselor controlerului se termină întotdeauna în Controler și această parte a numelui este omisă atunci când se referă la clasă.

Lansarea aplicației

Toate componentele de bază ale aplicației sunt gata. Avem un controler cu o metodă de acțiune care este apelat atunci când este solicitată o adresă URL implicită. Această metodă de acțiune se bazează pe o implementare batjocorită a interfeței magazinului nostru, care generează date de testare simple. Datele de testare sunt transmise vizualizării pe care am asociat-o cu metoda de acțiune și creează o listă simplă cu informații pentru fiecare produs. Dacă rulați aplicația, veți vedea rezultatul prezentat în Figura 7-6.

Figura 7-6: Revizuirea funcționalității de bază a aplicației

Acesta este un model tipic de dezvoltare pentru cadrul ASP.NET MVC. Alocăm destul de mult timp personalizării, dar apoi dezvoltarea funcționalității de bază a aplicației are loc foarte repede.

Ok, așa că sunt nou în întreaga lume a MVC, dar acest lucru pare a fi o modalitate foarte bună de a face lucrurile și încerc să pun lucrurile aici.

Problema este următoarea: nu pot obține date din tabelul meu din baza de date SQL într-un simplu formular drop-down de pe pagina mea de înregistrare.

Nu am nicio idee unde să pun materialul, unde este codul pentru a deschide tabelul, să aleg identificatorii, unde să pun răspunsul.scrie și cum să-l trimit în vizualizare?

Modelul meu este așa:

Utilizatori de clasă publică (public string name (get; set;) public int user_id (get; set;))

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

Și punctul meu de vedere este acesta:

@model Community.Models.users

Am căutat pe Google de 2 zile și am urmărit câteva videoclipuri pe youtube, dar fără rezultat, nu îl găsesc. Te rog, cineva cu ceva cunoștințe aici? Și vă rog să-mi numiți tutoriale și / sau forumuri bune unde pot găsi mai multe întrebări pe care le pot avea

Încă nu am noroc la acest proiect.

Creez un formular și în această formă vreau o buclă db (IEnumerable). Dar modelul actual nu este IEnumerable. Sunt aproape blocat uitându-mă la o grămadă de tutoriale și toate listează doar o conexiune, dar dacă am nevoie de două modele?

Iată controlerul meu, m-am gândit că trebuie să treci lista la vedere, nu?

Public ActionResult Registration () (return View (db.users.ToList ());)

Cum obțin această listă în vizualizarea mea fără modelul IEnumerable?

@neoistheone, exemplul tău nu m-a ajutat prea mult, DB-ul meu se deschide astfel:

Private DataBaseContext db = new DataBaseContext ();

și nu știu cum să o fac, dar deschide conexiunea. Am încercat atâtea ore, doar prost, nu am dormit de mult!

Folosesc programarea ASP-Classic fyi și aceasta este prima mea încercare serioasă de a-mi reîmprospăta cunoștințele despre programarea limbajului modern și OOP.

6 răspunsuri

Adăugați SelectList la modelul dvs.:

Public SelectList DropDownList (get; set;)

construiți o clasă pentru această colecție:

Clasa publică MyListTable (șir public Cheie (get; set;) public string Afișare (get; set;))

și apoi în controlerul dvs. încărcați datele din clasa MyListTable din baza de date:

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

și, în cele din urmă, trebuie să trimiteți modelul la vizualizare:

Vizualizare retur (model);

Acum, în Razor, puteți afișa acest lucru:

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

Desigur, poți numi aceste lucruri nume mai bune, dar ai ideea.

Există deja răspunsuri grozave, dar iată o altă abordare.

Veți utiliza utilizatorul ca model, ListUserViewModel ca model de vizualizare și UserController ca controler. Sarcina modelului de vizualizare este de a transporta toate informațiile necesare pentru a fi afișate pe pagina de la controler fără a adăuga proprietăți nedorite la clasa modelului. În lista de sarcini a utilizatorului dvs. din baza de date din lista derulantă.

Clasă publică Utilizator // Apropo, folosiți singularul când denumiți o clasă (numele șirului public (get; set;) public int user_id (get; set;))

View-model

Public class ListUserViewModel (listă publică Utilizatori (get; set;))

controlor

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

Acum utilizați ListUserViewModel în loc de Utilizator în vizualizarea dvs. ca model

@model Community.Models.ListUserViewModel

și dropdown

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

Explicaţie:

Creați o listă derulantă pentru utilizatorii cu Model.Users ca sursă de date a listei. „user_id” ca valoare a utilizatorului selectat și „nume” ca etichetă de afișare. ultimul argument (am pus un șir gol "") este valoarea implicită pe care o va afișa meniul derulant înainte de selecție.

Sper că acest lucru te ajută pe tine sau pe altcineva.

Incearca-l,

Șir public CoutryID (get; set;) Public list CountryList (get; set;)

Metoda controlerului care completează lista

Lista publică getCountryList () (folosind (QRMG_VendorPortalDataContext _context = new QRMG_VendorPortalDataContext ()) (return (din c în _context.Countries where c.IsDeleted == false select c) .ToList ();))

Listă derulantă în vizualizare

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

acesta este tabelul meu din baza de date

Uită-te la controlerul meu de acțiune

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

și în vedere

@ Html.DropDownList ("LetterStatus")

constructorul pe care îl folosesc

Listă nouă de selectare (listă myListFromDatabase, șir PropertyNameOfValueInHtml, șir PropertyNameOfDesplayInHtml, șir SelectedItemValue);

această Request.QueryString ["LetterStatus"] deoarece trimit articolele selectate către QuerySrting

și pe baza CurrentCulture am ales ce coloană să afișez

iar rezultatul

dar cred că cel mai bun mod de a face acest lucru este: - obțineți sau creați Elements, apoi Iterează pentru a le arunca pentru a genera manual eticheta de selectare. Am descris bine această abordare în

25.11.06 12.7K

Introducere

ASP.NET este una dintre componentele .NET Framework. Să enumerăm pe scurt principalele caracteristici ale acestei tehnologii.

* Limbă comună de execuție CLR
* Biblioteca de clase .NET Framework
* Limbi .NET (C #, VB.NET, J # și altele)
* ADO.NET
* ASP.NET
* Servicii web
* Limbă intermediară MSIL (Microsoft Intermediate Language). Este un asamblator pentru runtime CLR.

ADO.NET este un set de clase pentru accesarea bazelor de date Microsoft SQL Server, a surselor de date OLEDB și a fișierelor XML.

Diferite părți ale proiectului dvs. pot fi scrise în diferite limbi, aceasta se numește interoperabilitate. Vom încerca să scriem un proiect în care una dintre pagini va fi în Visual Basic, iar cealaltă în C #.

Limbile de calculator sunt compilate și interpretate. În procesul de compilare a unui program scris într-un limbaj compilat, este creat un fișier executabil (în Windows - exe). Funcționează rapid, dar nu poate rula pe altă platformă. Mașina pe care rulează trebuie să aibă o configurație similară. De exemplu, dacă programul folosește dll, atunci această bibliotecă trebuie instalată și pe mașina țintă. Programele interpretate sunt compilate la runtime, deci rulează mai lent, dar nu sunt specifice mașinii. În NET Framework, se utilizează o compilație în doi pași, adică primul pas este compilarea în MSIL, iar al doilea este compilarea just-in-time de către compilator în timpul rulării. Compilatorul JIT optimizează codul pentru mașina pe care este executat. În ASP.NET, o pagină este compilată în MSIL prima dată când un client accesează pagina. Clasele pe care le folosește sunt compilate împreună cu acesta. Dacă utilizați Visual Studio 2005, în loc să așteptați prima solicitare, puteți forța să compilați toate paginile din proiect. Acest lucru vă va permite să identificați sintaxa și alte erori.

MSIL este un asamblator independent de mașină. Poate rula pe orice mașină pe care este instalat CLR. Proiectul Mono încearcă să porteze CLR pe alte platforme, permițând comunicarea serverelor care rulează pe diferite platforme.

Vă puteți familiariza cu proiectul pe site-ul http://mono-project.com

Pe pagina http://go-mono.com/archive/xsp-0.10.html există un server XSP - ASP.NET, care poate servi ca o extensie a serverului Apache - serverul principal al sistemelor * nix -.

Cum funcționează ASP.NET

Când instalăm .NET, fișierul aspnet_isapi.dll este plasat și în directorul C: WINDOWSMicrosoft.NETFramework corespunzător. Aceasta este o extensie ISAPI pentru primirea cererilor pentru aplicațiile ASP.NET (* .aspx * .asmx etc.) și pentru crearea proceselor de lucru aspnet_wp.exe pentru a gestiona solicitările. Un server Internet - fie IIS încorporat în WebMatrix, fie încorporat în Visual Studio Cassini - utilizează această extensie atunci când trebuie să gestioneze accesul la paginile cu extensia aspx.

Acest modul analizează conținutul paginilor aspx împreună cu fișierul codat în spate și generează o clasă de limbă a paginii cu un obiect Page. O pagină aspx diferă de o pagină HTML obișnuită prin prezența comenzilor serverului, care sunt descrise cu etichete speciale. Pentru a înțelege cum funcționează ASP.NET, este important să rețineți că fiecare etichetă de control are un membru corespunzător din clasa de pagină. De exemplu,

convertit la

@__ctrl = new global :: System.Web.UI.WebControls.Label ();

Sarcina principală a obiectului Page este de a trimite cod HTML la fluxul de ieșire. Această clasă este compilată în dll, care este încărcată în procesul serverului web. Cererile ulterioare către pagină sunt tratate și de dll dacă codul sursă al paginii nu se modifică. Toate aceste fișiere pot fi găsite în directorul Temporary ASP.NET Files al versiunii curente a .NET. Dacă lucrăm în mediul de dezvoltare Visual Studio 2005 sau VWD, este creat un subdirector pentru fiecare proiect.

Tipuri de pagini și dosare ale proiectului

Fișierele noi pot fi adăugate la proiect prin dialogul Fișier nou. Dacă debifați caseta de selectare „Plasați codul într-un fișier separat”, Visual Studio va crea un fișier care conține atât pagina, cât și codul pentru ao procesa (în stilul WebMatrix).

Toate fișierele sunt plasate în directorul proiectului. În schimb, toate fișierele plasate în directorul proiectului vor deveni parte a acestuia. Nu există un fișier .csproj specific pentru site-urile web care listează părțile sale constitutive, așa cum a fost cazul în versiunile anterioare ale Visual Studio. Structura soluției este descrisă într-un fișier text.sln. O soluție poate include mai multe site-uri web și biblioteci.

ASP.NET 2.0 are subdirectoare de proiect speciale pentru diferite tipuri de fișiere. De exemplu, folderul App_Code conține clase publice, fișiere text și altele (DataSet, diagramă de clase). Fișierele cu extensiile .cs sau .vb care merg acolo sunt compilate automat atunci când este solicitată orice pagină a proiectului. App_Data conține sursele de date utilizate în proiect - baze de date Access și Microsoft SQL, fișiere XML. Acest director nu poate fi accesat din exterior, ci doar din aplicația însăși. Dosarul Teme conține teme de proiect (Capitolul 13). Aplicarea temelor vă permite să personalizați și să gestionați un aspect constant pentru site-ul dvs. App_GlobalResources conține resurse, cum ar fi tabele de șiruri, pe care le puteți crea în diferite limbi. Limba resurselor este selectată automat în funcție de setările browserului utilizatorului. Dosarul App_WebReferences conține linkuri către serviciile web utilizate.

Puteți crea propriile subdirectoare de proiect, de exemplu, pentru a stoca imagini.

Proiect în 2 limbi

Un proiect de site Web este alcătuit din pagini aspx și clase care sunt utilizate de pagini (și, desigur, o varietate de resurse). Fișierele cu clase, care pot fi accesate din diferite pagini, sunt plasate într-un folder special App_Code. Când sunt compilate, acestea sunt plasate într-un singur ansamblu - biblioteca dll în format executabil portabil. Nu contează în ce limbă este scrisă clasa, atâta timp cât este limba .NET.

Asamblările terțe compilate gata pot fi, de asemenea, utilizate în proiect. Acestea sunt plasate în folderul Bin. Cu toate acestea, acestea trebuie importate în proiect.

<%@ Import Namespace="MyCustomNamespace" %>

Creați un proiect nou. Adăugați un fișier la acesta, alegând tipul de fișier Class și limbajul Visual Basic. Mediul în sine va oferi plasarea acestuia în folderul Cod. Să-i spunem CustomClass. Va avea un cod foarte simplu. Doar o funcție care adaugă cuvântul Hello la numele trecut ca parametru.

Importă Microsoft.VisualBasic Public Class CustomClass Funcție publică GetMessage (nume ByVal Ca șir) Ca șir Returnează "Bună ziua" și nume Funcție finală Clasă finală

Adăugați pagina CodeFolder_cs.aspx la proiectul dvs. Această pagină este scrisă în C #, dar creează o clasă scrisă în VB.NET.

<%@ page language="C#" %> Pagini Inline ASP.NET

Bine ați venit la ASP.NET 2.0!

Introdu numele tau:

Pagina definește un formular care seamănă cu un formular de cerere Windows. Există un buton pe el, făcând clic pe care este procesat în funcția Button1_Click. Creează o clasă și își apelează funcția GetMessage cu un parametru care este preluat din controlul de editare. Valoarea returnată este scrisă în elementul Label1. Într-o versiune mai simplă, arată astfel:

Label1.Text = „Bună ziua” + TextBox1.Text;

O clasă poate fi scrisă în C # și utilizată dintr-o pagină în Visual Basic.

utilizarea sistemului; public class CustomClass2 (public String GetMessage (String input) (returnează "Hello from C #" + input;)) CodeFolder_vb.aspx code page:

Cu toate acestea, o singură limbă poate fi plasată în directorul App_Code. Dacă există fișiere în diferite limbi, proiectul nu se va compila. Pentru a utiliza două limbi, trebuie să creați un subdirector, să îl adăugați în fișierul web.config și să puneți fișierele în cealaltă limbă.

Înregistrare în fișierul web.config:

... ...

Directivele

Fiecare pagină aspx conține de obicei directive cu ajutorul cărora puteți controla comportamentul paginii. Vă puteți gândi la ele ca la limbajul cu care comunicați cu compilatorul, spunându-i cum să gestioneze o anumită pagină. Directivele sunt plasate de obicei la începutul fișierului. Am întâlnit deja directiva Page în prima prelegere.

Sintaxa pentru declararea directivelor este următoarea:

<%@ %>

Puteți declara mai multe directive în același timp:

<%@ %>

Există 11 directive în ASP.NET 2.0.
Descrierea atributelor directivei
@Nume asamblare
Src Importă un ansamblu cu numele specificat în pagină sau control.
@Control este același cu Page. Folosit pentru a seta proprietăți la crearea propriilor controale personalizate.
Interfața @Implements Indică faptul că clasa acestei pagini implementează interfața dată
@Import namespace Importă un spațiu de nume
@Master este același cu Pagina. Se aplică paginilor șablonului de proiectare (pagina Master). Nou în ASP.NET 2.0
@MasterType TypeName
VirtualPath Oferă o referință puternic tastată la clasa conținută în șablonul de proiectare. Permite accesul la proprietățile acestei clase.
@OutputCache Durata
Locație
VaryByCustom
VaryByHeader
VaryByParam
VaryByControl Controls page sau control cache. Acest lucru este descris mai detaliat în Lectura 15.
@Page vezi mai jos Atributele legate de această pagină. Folosit numai în fișiere cu extensia aspx
@PreviousPageType TypeName
VirtualPath Pagina de pe care utilizatorul a introdus datele a fost trimisă. Nou în ASP.NET 2.0. Anterior, paginile postau numai postări pentru ei înșiși.
Pagina de referință
Control Pagina sau controlul pentru a compila cu aceasta
@Asamblare Înregistrare
Spațiu de nume
Src
Nume eticheta
TagPrefix Creează aliasuri pentru spații de nume și controale personalizate

Deocamdată, să aruncăm o privire mai atentă la 2 dintre ele - Pagină și import.

Directiva paginii

Directiva Pagină vă permite să setați proprietățile paginii care vor fi utilizate la compilare. Această directivă este utilizată mai des decât altele, deci trebuie luată în considerare mai detaliat.

Cele mai importante atribute ale directivei sunt enumerate în tabel:

AutoEventWireup Gestionarea automată a evenimentelor de pagină
Tampon Controlează tamponarea paginilor. Tamponat implicit
Numele clasei Vă permite să atribuiți numele clasei generate de această pagină
CodeFile Numele fișierului codat în spatele acestei pagini
Cultură Setează un set de opțiuni regionale, adică limba, formatul monedei, datele, numerele
Depanare Dacă este adevărat, informațiile de depanare sunt tipărite pe pagină
Urmă Ieșirea informațiilor de urmărire
EnableViewState Salvarea stării paginii. Este salvat în mod implicit.
EnableTheming Vă permite să activați sau să dezactivați suportul pentru piele. Activat în mod implicit
Moștenește Clasa de la care clasa acestei pagini este moștenită în tehnologia cod-behind
IsAsync Indică dacă pagina este procesată asincron.
Limba Limba utilizată în codul încorporat
Nivel de avertizare Cel mai înalt nivel permis de avertizare a compilatorului
CompilerOptions Opțiuni de compilare

Spații de nume ale bibliotecii de clase

Biblioteca de clase FCL conține mii de clase. Pentru ușurință în utilizare, acestea sunt combinate în spații de nume. Pentru a face referire la clasele declarate într-un spațiu de nume fără a specifica calea completă, acesta trebuie importat în proiect. Dacă doriți să lucrați cu fișiere XML, trebuie să importați spațiul de nume System.XML. Paginile cu coduri C #, ca întotdeauna, folosesc directiva de utilizare.

folosind System. XML;

Pe pagina aspx - Directiva import

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

Fiecare spațiu de nume necesită o directivă de import separată.

Visual Studio .NET și VWD includ cele mai frecvent utilizate spații de nume în pagina C # în mod implicit. Nu trebuie să importați aceste spații de nume în pagina aspx.

utilizarea sistemului; folosind System.Data; folosind System.Configuration; folosind System.Collections; folosind System.Web; folosind System.Web.Security; folosind System.Web.UI; folosind System.Web.UI.WebControls; folosind System.Web.UI.WebControls.WebParts; folosind System.Web.UI.HtmlControls;

De exemplu, spațiul de nume System.Web.UI conține clasa Page, fără de care nu poate exista nicio pagină ASP.NET; System.Web conține HttpRequest și HttpResponse.

Vizualizator de clasă

De unde știi ce clase sunt în biblioteca de clase .NET? Browserul de obiecte (Visual Studio 2005) și browserul de clase WebMatrix sunt destinate pentru aceasta. Pentru a deschide browserul de obiecte în Visual Studio 2005 sau VWD Express, selectați elementul de meniu Vizualizare-> Navigator de obiecte. Dacă utilizați WebMatrix, atunci Browserul de clase se află în același folder de meniu Windows ca WebMatrix - Toate programele-> ASP.NET WebMatrix. Browserul de clase ASP.NET este inclus în Framework SDK.

Toate spațiile de nume disponibile sunt afișate ca noduri într-o structură de copac. Suntem interesați de System.Web. Extindeți acest nod. În interior erau alte spații de nume. Extindeți System.Web.UI. Există un număr mare de clase, interfețe, delegați, enumerări. Ele pot fi recunoscute după icoanele lor. De exemplu, pictograma delegat arată ca o valiză.

- Clasa

- interfață

- eveniment

- enumerare

- metoda

Selectați clasa Pagină. O listă a metodelor, câmpurilor și evenimentelor sale va apărea în fereastra din dreapta. Dacă selectați o metodă, descrierea acesteia va apărea în a treia fereastră sub a doua. În interiorul clasei există încă două foldere - clase de bază și clase descendente. Toate acestea pot fi, de asemenea, vizualizate. Browserul de obiecte arată, de asemenea, clasele proiectului curent. Dacă clasele sunt comentate cu etichete de generare a documentației XML, atunci aceste informații sunt de asemenea vizibile, de exemplu, Rezumat, Parametri, Valori, Returnări.

Examinând proprietatea IsPostBack, puteți vedea că are o valoare booleană și este doar în citire.

Verificarea respectării standardelor

Există diferite standarde pentru HTML și XHTML. Standardele ulterioare au cerințe mai stricte, de exemplu, XHTML 1.1 nu permite utilizarea
și alte etichete simple, fără o bară finală
... În același timp, standardele vechi nu acceptă etichete noi.

Antetul cererii HTTP specifică standardul documentului, Visual Studio 2005 specifică următorul standard pe toate paginile:

Acest standard necesită atributul xmlns din etichetă - linkuri către un site cu o descriere a standardului.

Multe pagini realizate pentru versiunile anterioare ale ASP.NET nu au acest atribut. Bara de instrumente Html Source Editing conține, de asemenea, o listă derulantă în care puteți selecta standardul sau versiunea browserului pentru care este destinată această pagină. Pagina este verificată automat în raport cu acest standard.
Proprietățile paginii

Pagina este baza tuturor lucrurilor dintr-o aplicație Web.

Clasa System.Web.UI.Page încapsulează funcționalitatea necesară pentru crearea și redarea paginilor ASP.NET.

Fiecare pagină ASP.NET este un obiect de clasă care este generat automat de nucleul ASP.NET. Clasa moștenește din clasa asociată paginii dacă folosim codul în spatele sau moștenește direct din System.Web.UI.Page dacă codul C # este încorporat în pagină. Mediul creează, de asemenea, un constructor implicit.

Pentru a verifica acest lucru, putem crea o pagină „PageType.aspx”:

<%@ Page Language="C#" %> Tipul paginii

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

Iată rezultatul:


Tipul de bază al acestei pagini este System.Web.UI.Page

Aceeași pagină creată folosind tehnologia de divizare a codului.

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

scrie rezultatul

Tipul acestei pagini este ASP.pagetype_aspx
Tipul de bază al acestei pagini este PageType

Faptul că PageType moștenește de la System.Web.UI.Page este scris în fișierul codat:

clasa parțială publică PageType: System.Web.UI.Page

Obiectul paginii curente poate fi accesat ca variabilă Pagină. Pagina este containerul pentru comenzile pentru această pagină, deci conține o colecție de controale. Dacă eticheta Dacă este prezent atributul runat = „server”, atunci pagina conține câmpul Header, prin care puteți controla titlul paginii. De exemplu, schimbați titlul paginii din antetul browserului, atribuiți un fișier de foaie de stil în cascadă.

Bună ziua ASP.NET

Aflați să programați în ASP.NET

În acest exemplu, am schimbat textul titlului. Rulați această pagină. În HTML rezultat, în interiorul etichetei nu mai există „Pagină fără titlu”, ci „Titlu nou”, care a fost instalat prin Page.Header.Title. Eticheta a fost stilizată <p>Ceea ce s-a reflectat în acest fel:</p> <p><style type="text/css"> p { color:Blue;background-color:Beige; } </style></p> <p>Pagina CSS externă a fost importată dintr-un fișier.</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.

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

Тег