Pregled uporabniških kontrolnikov v primerjavi s kontrolniki po meri

Velja za: ASP.NET

ASP.NET podpora Voice stolpec


Pregled uporabniških kontrolnikov v primerjavi s kontrolniki po meri

Če želite ta stolpec prilagoditi vašim potrebam, vas vabimo, da pošljete svoje zamisli o temah, ki vas zanimajo, in vprašanja, ki jih želite obravnavati v prihodnjih člankih zbirke znanja in v stolpcih podpora Voice. Svoje zamisli in povratne informacije lahko predložite z obrazcem Ask for it . Obstaja tudi povezava na obrazec na dnu tega stolpca.

Uvod


živjo! To je Parag, in jaz sem podporni inženir, ki delajo z Microsoftovo skupino za podporo ASP.NET za več kot leto dni. Preden se je pridružil Microsoftu, sem delal na spletnih projektih in namiznih aplikacijah z Microsoftovimi tehnologijami. Medtem ko zagotavlja kakovostno podporo strankam, sem videl primere, kjer je bilo nekaj zmede okoli po meri kontrol, in jaz bi samo rad vzel nekaj časa, da pojasni nekaj konceptov okoli po meri kontrol. Tako slabo, kot je videti, verjemite mi, ko boste dobili visi od tega, boste v boljšem položaju, da cenijo ASP.NET.

Pregled

V stolpcu tega meseca, bom razpravljali o naslednjih temah:
  • Kaj so uporabniški kontrolniki?
  • Kaj so kontrolniki po meri?
  • Katere so osnovne razlike med kontrolami uporabnikov in kontrolniki po meri?
Predstavil bom tudi nekaj naprednih tem, ki zadevajo kontrolnike po meri, kot so upravljanje države in upodabljanje kontrolnikov po meri.

Kaj so uporabniški kontrolniki?

Uporabniški kontrolniki so kontrolniki po meri, za večkratno uporabo in uporabljajo iste tehnike, ki so zaposlene v kontrolnikih HTML in spletnem strežniku. Ponujajo preprost način za razdelitev in ponovno uporabo skupnih uporabniških vmesnikov v ASP.NET spletnih aplikacij. Uporabljajo isti programski model spletnih obrazcev, na katerem deluje stran spletnih obrazcev. Če želite več podrobnosti o programskem modelu spletnih obrazcev, obiščite to spletno stran Microsoft Developer Network (MSDN):

Kako ustvariti nadzor uporabnika

Sintaksa, ki jo uporabite za ustvarjanje uporabniškega kontrolnika, je podobna sintaksi, ki jo uporabite za ustvarjanje strani spletnih obrazcev (. aspx). Edina razlika je, da uporabnik kontrolnik ne vključuje < HTML >, < telo >, in < obrazec > elemente, saj stran spletni obrazci gosti nadzor uporabnika. Če želite ustvariti kontrolnik uporabnika, sledite tem korakom:
  1. Odprite besedilo ali urejevalnik HTML in ustvarite blok strežniške kode, ki izpostavi vse lastnosti, metode in dogodke.
    <script language="C#" runat="server">   public void button1_Click(object sender, EventArgs e)   {      label1.Text = "Hello World!!!";   }</script>
  2. Ustvarite uporabniški vmesnik za nadzor uporabnika.
    <asp:Label id="label1" runat="server"/> <br><br><asp:button id="button1" text="Hit" OnClick="button1_Click" runat="server" />

Uporaba uporabniškega kontrolnika na strani s spletnimi obrazci

  1. Ustvarite novo stran spletnih obrazcev (. aspx) v programu Microsoft Visual Studio .NET 2002, Microsoft Visual Studio .NET 2003, Microsoft Visual Studio 2005 ali kateri koli urejevalnik besedil.
  2. Razglasi Direktivo @ register . Uporabite na primer naslednjo kodo.
    <%@ Register TagPrefix="UC" TagName="TestControl" Src="test.ascx" %>
    Opomba Predpostavite, da sta kontrolnik uporabnika in stran» spletni obrazci «na isti lokaciji.
  3. Če želite uporabiti kontrolnik uporabnika na strani spletni obrazci, po Direktivi @ register uporabite naslednjo kodo.
    <html>    <body>          <form runat="server">               <UC:TestControl id="Test1" runat="server"/>          </form>    </body>  </html>

Kako ustvariti primerek uporabniškega nadzora programsko v kodi za datoteko strani s spletnimi obrazci

Prejšnji primer je na strani spletnih obrazcev z Direktivo @ register deklarativno nadzoral uporabnika. Vendar, vi moči instantiate a uporabnik pregled dinamično ter povečati to v stran. Tukaj so koraki za to:
  1. Ustvarite novo stran s spletnimi obrazci v Visual studiu.
  2. Pomaknite se do kode za datoteko, ustvarjeno za to stran s spletnimi obrazci.
  3. V Page_Load primeru razreda strani napišite naslednjo kodo.
    // Load the control by calling LoadControl on the page class.Control c1 = LoadControl("test.ascx");            // Add the loaded control in the page controls collection.Page.Controls.Add(c1);
    Opomba Uporabniku lahko dinamično dodate nadzor pri določenih dogodkih življenjskega cikla strani. Če želite več informacij, obiščite naslednja spletna mesta:

Kako se obdeluje nadzor uporabnika

Ko je zahtevana stran z uporabniškim nadzorom, se zgodi naslednje:
  • Razčlenjevalnik strani razčleni datoteko. ascx, določeno v atributu src v Direktivi @ register , in ustvari razred, ki izhaja iz razreda System. Web. UI. UserControl .
  • Razčlenjevalnik nato dinamično zbira razred v sklop.
  • Če uporabljate Visual Studio, nato pa v načrtovalnem času samo, Visual Studio Ustvari kodo za datoteko za nadzor uporabnika, in datoteka je predprevedena s strani oblikovalca.
  • Končno, razred za nadzor uporabnika, ki je ustvarjen s procesom dinamične generacije kode in kompilacija, vključuje kodo za kodo za datoteko (. ascx.cs), kot tudi kodo napisana v datoteki. ascx.

Kaj so kontrolniki po meri?

Kontrolniki po meri so zbrani komponente kode, ki se izvajajo v strežniku, izpostavljajo predmetni model in upodobijo označevalni tekst, na primer HTML ali XML, kot običajni spletni obrazec ali uporabnik nadzor.

Izbiranje osnovnega razreda za kontrolnik po meri

Če želite napisati kontrolnik po meri, neposredno ali posredno izpeljete nov razred iz razreda System. Web. UI. Control ali iz razreda System. Web. UI. WebControls. WebControl :
  • Če želite, da kontrolnik upodobi nevizualne elemente, morate izhajati iz sistema System. Web. UI. Control . Na primer, < meta > in < glave > so primeri nevidnega upodabljanja.
  • Če želite, da kontrolnik upodobi HTML, ki ustvari vizualni vmesnik v odjemalskem računalniku, morate izhajati iz sistema. Web. UI. WebControls. WebControl .
Če želite spremeniti funkcionalnost obstoječih kontrolnikov, kot je na primer gumb ali oznaka, lahko neposredno izpeljete nov razred s temi obstoječimi razredi in lahko spremenite njihovo privzeto obnašanje.Na kratko, kontrolen sloj priskrbeti se temeljen smotrnost z kateri vi moči mesto to v kontrolen drevo zakaj a stran sloj. Razred WebControl doda funkcionalnost osnovnemu kontrolnemu razredu za prikazovanje vizualne vsebine v odjemalskem računalniku. Z razredom WebControl lahko na primer nadzirate videz in sloge prek lastnosti, kot so pisava, barva in višina.

Kako ustvariti in uporabljati preprost nadzor po meri, ki se razteza od System. Web. UI. Control uporaba Visual Studia

  1. Zaženite Visual Studio.
  2. Ustvarite projekt knjižnice razredov in mu dajte ime, na primer CustomServerControlsLib.
  3. Projektu dodajte izvorno datoteko, na primer SimpleServerControl.cs.
  4. V razdelek sklici vključite sklic sistemskega imenskega prostora System. Web .
  5. Preverite, ali so v datoteki SimpleServerControl.cs vključeni naslednji imenski prostori.
    SystemSystem.CollectionsSystem.ComponentModelSystem.DataSystem.WebSystem.Web.SessionStateSystem.Web.UISystem.Web.UI.WebControls
  6. Podedujejo razred Simpleservercontrols z razredom kontrolnika Base.
    public class SimpleServerControl : Control
  7. Preglasitev načina upodabljanja za zapisovanje izhoda v izhodni tok.
    protected override void Render(HtmlTextWriter writer) { writer.Write("Hello World from custom control");}
    Opomba Razred Htmltextwriter ima funkcionalnost pisanja HTML v tok besedila. Metoda pisanja v razredu Htmltextwriter izhodi določeno besedilo v tok odziva http in je enaka metodi Response. write .
  8. Prevedite projekt knjižnične knjižnice. To hoteti sploditi DLL proizvodnja.
  9. Odprite obstoječi ali ustvarite nov projekt spletnega programa ASP.NET.
  10. Dodajte stran s spletnimi obrazci, kjer lahko uporabite kontrolnik po meri.
  11. Dodajte sklic na knjižnico razredov v odseku sklica projekta ASP.NET.
  12. Registrirajte kontrolnik po meri na strani spletni obrazci.
    <%@ Register TagPrefix="CC " Namespace=" CustomServerControlsLib " Assembly="CustomServerControlsLib " %>
  13. Če želite instantiate ali uporabiti kontrolnik po meri na strani spletnih obrazcev, dodajte to vrstico kode v obrazec < > oznake.
    <form id="Form1" method="post" runat="server">    <CC:SimpleServerControl id="ctlSimpleControl" runat="server">    </CC:SimpleServerControl ></form>
    Opomba V tej kodi je Simpleservercontrol ime kontrolnika razreda znotraj knjižnice razredov.
  14. Zaženite stran spletni obrazci in videli boste izhod iz kontrolnika po meri.
Če ne uporabljate Visual Studia, morate izvesti naslednje korake:
  1. Odprite kateri koli urejevalnik besedil.
  2. Ustvarite datoteko z imenom SimpleServerControl.cs in napišite kodo, kot je navedeno v korakih od 1 do 14.
  3. V spremenljivki PATH dodajte naslednjo pot:
    c:\windows (winnt)\Microsoft.Net\Framework\v1.1.4322
  4. Zaženite ukazni poziv in pojdite na mesto, kjer je SimpleServerControl.cs prisoten.
  5. Zaženite ta ukaz:
    CSC/t: knjižnica/out: CustomServerControlsLib. SimpleServerControl. dll/r: System. dll/r: System. Web. dll SimpleServerControl.cs
    Če želite več informacij o prevajalniku C# (CSC. exe), obiščite to spletno mesto MSDN:
  6. Če želite zagnati kontrolnik po meri na strani spletni obrazci, naredite to:
    1. Ustvarite imenik pod mapo wwwroot.
    2. Zaženite upravitelja storitev Microsoft Internet Information Services (IIS) in označite nov imenik kot navidezni korenski imenik.
    3. Ustvarite mapo bin v novem imeniku.
    4. Kopirajte DLL kontrolnika po meri v mapo bin.
    5. Postavite vzorčno stran s spletnimi obrazci, ki ste jo ustvarili v prejšnjih korakih v novem imeniku.
    6. Zaženite vzorčno stran iz upravitelja IIS.
Zdaj, ko ste zgradili preprost kontrolnik po meri, Oglejmo si, kako izpostaviti lastnosti in uporabiti atribute načrtovanja časa na tem kontrolniku po meri.

Kako izpostaviti lastnosti na kontrolniku po meri

Gradil bom na prejšnjem primeru in uvedel eno ali več lastnosti, ki jih je mogoče konfigurirati med uporabo kontrolnika po meri na strani spletnih obrazcev.Ta primer prikazuje, kako definirati lastnost, ki bo prikazala sporočilo iz kontrolnika določeno število časov, kot je določeno v lastnosti kontrolnika:
  1. Odprite SimpleServerControl.cs v urejevalniku besedil.
  2. Dodajte lastnost v razred Simpleservercontrol .
    public class SimpleServerControl : Control{   private int noOfTimes;   public int NoOfTimes   {       get { return this.noOfTimes; }       set { this.noOfTimes = value; }   }    protected override void Render (HtmlTextWriter writer)   {     for (int i=0; i< NoOfTimes; i++)     {       write.Write("Hello World.."+"<BR>");     }    }}
  3. Prevedite kontrolnik po meri.
  4. Če želite na strani spletni obrazci uporabiti kontrolnik po meri, dodajte novo lastnost v deklaracijo kontrolnika.
    <CC:SimpleServerControl id="ctlSimpleControl" NoOfTimes="5" runat="server"></CC:SimpleServerControl>
  5. Če zaženete stran, se prikaže sporočilo» Hello World «iz kontrolnika po meri tolikokrat, kot je določeno v lastnosti kontrolnika.

Uporaba atributov načrtovanja časa na kontrolniku po meri

Zakaj so potrebni atributi načrtovanja časa
Kontrolnik po meri, ki ste ga zgradili v prejšnjem primeru, deluje po pričakovanjih. Če pa želite ta kontrolnik uporabiti v Visual studiu, boste morda želeli, da se lastnost Nooftimes samodejno poudari v oknu lastnosti, kadar je kontrolnik po meri izbran ob času načrtovanja.Če želite to narediti, morate informacije o metapodatkih posredovati Visual Studiem, ki jih lahko naredite s funkcijo v Visual studiu, imenovanimi atributi. Atributi lahko definirajo razred, metodo, lastnost ali polje. Ko Visual Studio naloži razred kontrolnika po meri, preveri, katere atribute je definiran na ravni razreda, metode, lastnosti ali polja, in ustrezno spremeni obnašanje kontrolnika po meri v času načrtovanja.Če želite več informacij o atributih, obiščite to spletno mesto MSDN:Izdelajmo vzorec, ki uporablja pogosto uporabljene atribute:
  1. Odprite SimpleServerControl.cs v urejevalniku besedil.
  2. Uvesti nekaj osnovnih atributov na ravni razreda, na primer Defaultproperty, Toolboxdatain Tagprefixattrbute. Naš vzorec bomo gradili na teh treh atributih.
            [// Specify the default property for the control.DefaultProperty("DefaultProperty"),// Specify the tag that is written to the aspx page when the        // control is dragged from the Toolbox to the Design view. // However this tag is optional since the designer automatically // generates the default tag if it is not specified.ToolboxData("<{0}:ControlWithAttributes runat=\"server\">" +"</{0}:ControlWithAttributes>")]public class ControlWithAttributes : Control{private string _defaultProperty;public string DefaultProperty{get { return "This is a default property value"; }set { this._defaultProperty = value; }}protected override void Render(HtmlTextWriter writer){writer.Write("Default Property --> <B>" + DefaultProperty + "</B>");}         }
  3. Obstaja še ena tag imenovano Tagprefixattrbute. To je atribut na ravni skupščine, ki zagotavlja predpono oznake, ko povlečete kontrolnik iz orodjarne v Oblikovalnik. V nasprotnem primeru oblikovalec ustvari predpono, kot je» cc1 «privzeto. Tagprefixattrbute ni neposredno uporabljen za kontrolni razred. V priložiti Tagprefixattrbute, plan AssemblyInfo.cs, vračunati sledeč črta od zbornik, ter torej zopet graditi načrt.
    [assembly:TagPrefix("ServerControlsLib ", "MyControl")]
    Opomba Če hočeš zidava izvor using zapoved črta, vi potreba tvoriti AssemblyInfo.cs pila, mesto pila v naslovnik to vsebovati vsi izvor pila, ter prost dostop sledeč zapoved v zidava pregled:
    > CSC/t: knjižnica/out: ServerControlsLib. dll/r: System. dll/r: System. Web. dll *. cs

Katere so osnovne razlike med kontrolami uporabnikov in kontrolniki po meri?

Zdaj, ko imate osnovno predstavo o tem, kaj je nadzor uporabnikov in nadzor po meri, in kako jih ustvariti, Oglejmo si hiter pogled na razlike med obema.
Dejavniki Nadzor uporabnikov Kontrolnik po meri
Uvajanje Zasnovan za scenarije za enkratno uporabo Razporejeno v izvorni obliki (. ascx) skupaj z izvorno kodo aplikacije Če je treba isti nadzor uporabiti v več kot eni vlogi, uvaja redundantnost in težave pri vzdrževanju Zasnovan tako, da ga lahko uporablja več kot en zahtevek Razporejeno bodisi v imeniku programa bin ali v predpomnilnik globalnega zbiranja Distribuirano enostavno in brez težav, povezanih z redundanco in vzdrževanje
Ustvarjanje Ustvarjanje je podobno kot strani spletnih obrazcev so ustvarjene; zelo primerna za hiter razvoj aplikacij (RAD) Pisanje vključuje veliko kode, ker ni podpore oblikovalec
Vsebine Veliko boljša izbira, ko potrebujete statično vsebino v fiksni postavitvi, na primer, ko naredite glave in noge Bolj primeren za to, kdaj aplikacija zahteva, da se prikaže Dinamična vsebina; lahko ponovno uporabite v aplikaciji, na primer za kontrolnik za podatkovno vezano tabelo z dinamičnimi vrsticami
Design Pisanje ne zahteva veliko načrtovanja aplikacij, ker so avtor v času načrtovanja in večinoma vsebujejo statične podatke Pisanje iz nič zahteva dobro razumevanje nadzora življenjskega cikla in vrstni red, v katerem se izvajajo dogodki, ki je običajno poskrbljeno za nadzor uporabnikov

Napredne teme

Nato si oglejmo nekaj naprednih funkcij, ki jih lahko uporabite pri razvoju kontrolnikov po meri.

Upravljanje države

Spletne aplikacije so zgrajene na HTTP, ki je brez državljanstva. Stran in njeni podrejeni kontrolniki so ustvarjeni na vsaki zahtevi in se odstranijo po tem, ko je prošnja končana. Če želite ohraniti stanje v klasičnem programiranju ASP, uporabite predmete seje in aplikacije. Ampak za to, morate narediti veliko kodiranja. Da bi se temu izognili, ASP.NET zagotavlja mehanizem, znan kot stanje pogleda za vzdrževanje stanja v več zahtevah. Če želite izvedeti več o upravljanju države in stanju pogleda, obiščite ta spletna mesta MSDN:
Primer uporabe stanja pogleda v kontrolniku po meri
ViewStateExample.cs
using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;using System.Text;namespace ServerControlLib{/// <summary>/// When a page framework reloads this control after postback, it           /// will restore the values which are in view state./// This control can easily perform state management without         /// implementing our own logic for maintaining the state./// </summary>public class ViewStateExample : WebControl{// Text to be displayed in Text box control.private string _text;/* * This property needs to be populated before every                  * postback in order to  * retain its value.*/ public string Text{get { return (_text == null) ? "_text property is empty"  : _text; }set { _text = value; }}/* * This property needs to be filled once and should be                  * available on the successive postbacks.*/ public string TextInViewState{get{object o = ViewState["TextInViewState"];return (o == null) ? "View state is empty" : (string)o;}set { ViewState["TextInViewState"] = value; } }/* * Over-ridden method on WebControl base class which                                    * displays both of the property values  * i.e. one stored in view state and other which is not                  * saved in view state.*/protected override void RenderContents(HtmlTextWriter writer){writer.Write("Text Without View State = ");writer.Write(Text);writer.Write("<hr><br>");writer.Write("Text In View State = ");writer.Write(TextInViewState);}}}
Primer uporabe prejšnjega kontrolnika na strani s spletnimi obrazci
ViewStateExampleDemo.aspx
<%@ Page Language="C#" %><%@ Register TagPrefix="CC" Namespace="ServerControlLib" Assembly = "ServerControlLib" %><html>  <head>    <script runat="server">      void button1_Click(object sender, EventArgs e)      {          Control1.Text = textbox1.Text;          Control1.TextInViewState = textbox2.Text;      }    </script>  </head>  <body>    <form runat="server" ID="Form1">      <br>      Property Value Without View State: <asp:TextBox id="textbox1"         runat="server" />      <br>      Property Value with View State: <asp:TextBox id="textbox2"         runat="server" />      <asp:Button text="Cause Postback" onClick="button1_Click"         id="button1" Runat="server" />      Output from the ViewStateExample Control :      <CC:ViewStateExample id="Control1" runat="server"/>    </form>  </body></html>

Upodabljanje

V tem razdelku bom na kratko opisal, katere metode morate preglasiti, ko boste izpeljali kontrolnik po meri iz razreda kontrolnika ali razreda WebControl .
Upodabljanje metod System. Web. UI. Control razred
Če želite več informacij o načinih upodabljanja v razredu System. Web. UI. Control , obiščite ta spletna mesta MSDN:
Kako je kontrolnik upodobljen na strani
Vsaka stran ima nadzorno drevo, ki predstavlja zbirko vseh podrejenih kontrolnikov za to stran. Če želite upodobiti nadzorno drevo, je ustvarjen predmet razreda Htmltextwriter , ki vsebuje HTML, ki bo upodobljen v odjemalskem računalniku. Ta predmet se prenese na metodo Rendercontrol . Nato se metoda Rendercontrol sklicuje na metodo upodabljanja . Potem, Render metoda kliče renderchildren metoda za vsak otrok nadzor, ki Rekurzivne zanke do konca zbiranja je dosežena. Ta postopek je najbolje razložiti z naslednjo kodo primera.
public void RenderControl(HtmlTextWriter writer) {    // Render method on that control will only be called if its visible property is true.    if (Visible)    {        Render(writer);    }}protected virtual void Render(HtmlTextWriter writer) {    RenderChildren(writer);}protected virtual void RenderChildren(HtmlTextWriter writer) {    foreach (Control c in Controls)     {        c.RenderControl(writer);    }} 
Upodabljanje metod System. Web. UI. WebControl razred
Če želite več informacij o načinih upodabljanja v razredu System. Web. UI. WebControl , obiščite ta spletna mesta MSDN:
Kako upodabljanje razreda WebControl poteka
Ta primer kode prikazuje način upodabljanja za kontrolnik po meri.
protected override void Render(HtmlTextWriter writer){    RenderBeginTag(writer);    RenderContents(writer);    RenderEndTag(writer);}
Načina upodabljanja za razred WebControl ni treba preglasiti. Če želite upodobiti vsebino v razredu WebControl , morate preglasiti metodo renderkazalo . Če pa želite razveljaviti metodo upodabljanja , morate preglasiti metodo Renderbegintag in metodo RenderEndTag v posebnem vrstnem redu, ki je prikazan v prejšnjem primeru kode.

Sklep

To je vse za zdaj na nadzor uporabnikov in nadzor po meri v ASP.NET 1,0 in ASP.NET 1,1. Upam, da ta stolpec vam pomaga razumeti osnovne razlike med njimi in različne pristope, ki jih lahko sprejmejo, da jih razvijejo.Hvala za vaš čas. Pričakujemo, da bomo napisali več o naprednih temah za kontrolnike po meri, kot so upravljanje države, slogi nadzora, sestavljeni kontrolniki in podpora za čas načrtovanja za kontrolnike po meri v bližnji prihodnosti.Če želite več informacij o kontrolnikih, obiščite ta spletna mesta MSDN:
Kot vedno, vas prosimo, da predložijo zamisli o temah, ki jih želite obravnavati v prihodnjih stolpcih ali v zbirki znanja z uporabo Ask for it Form.