HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Saját HtmlTextWriter készítése ASP.NET oldalhoz


Példaprogram letöltése

10110 bájt

ASP.NET alkalmazások fejlesztésekor általában nem kell törődnünk azzal, hogy milyen módon kerülnek web oldalaink kódja a HTML adatfolyamba. Elképzelhető azonban olyan eset, amikor szükség lehet egy saját osztályra annak érdekében, hogy a folyamat, vagyis a HTML kód összeállítása sajátos legyen. Cikkünkben megismerhetjük, milyen módon hozhatunk létre saját HtmlTextWriter osztályt a cél érdekében.

Mellékelt példa megnyitása előtt szükséges egy CHTWriterTest nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez nyissa meg a mellékelt mappa Tulajdonság ablakát és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával.
A megoldás a Page osztály CreateHtmlTextWriter nevű metódusával lehetséges, azonban ennek megismerése előtt ki kell térni arra, milyen osztályokkal történik a Weblapok megjelenítése, a metódus milyen osztályokkal áll szorosabb kapcsolatban.
ASP.NET oldalaink tulajdonképpen gyűjteményei az összes kontrolnak, melyekre kérés érkezik, mondhatnánk azt, hogy egy nevesített konténer. Ennek eredményeképpen felhasználható kódunkban a Control osztály (mint ősosztály) Render metódusa a gyűjtemény kódelemeinek küldéséhez. A Render metódus egy paraméterrel rendelkezik, amely egy HtmlTextWriter osztályú paraméter. Az osztály gazdag metódusgyűjteménye teszi lehetővé, hogy karakterről-karakterre írjuk kódjainkat a kimeneti HTML adatfolyamba. Annak érdekében, hogy egyedi tulajdonságokkal rendelkező osztályt készítsünk, ebből kell származtatnunk.
A HtmlTextWriter osztályból származó osztályunk létrehozásához fel kell használnunk még egy osztályt, ez pedig a TextWriter osztály, mely a System.IO névtér eleme, és a karakteres írást teszi lehetővé a legváltozatosabb célfolyamokba. Absztrakt osztály lévén funkcionalitása származtatott osztályokban specializálódik.
Származtatott HtmlTextWriter osztály létrehozásához a következőket kellett tennünk. Deklaráltunk egy osztályt MyHtmlTextWriter néven, melyet majd felhasználunk az oldal kontroljainak írásához:
public class MyHtmlTextWriter : HtmlTextWriter
{
Létrehoztuk az osztály konstruktorát úgy, hogy a kontruktor taginicializáló listájában megadtuk az alaposztály konstruktorát, így nem kellett törődnünk a TextWriter osztályból származó osztály létrehozásával. Az osztályunk is az alaposztályban megadott TextWriter-t használja:
  public MyHtmlTextWriter(TextWriter writer):base(writer)
  {
    writer.Write("<font color=blue> A 'MyHtmlTextWriter' osztály egy példánya elkészült, használható a HTML-kód böngészőre írásához!</font>");
    writer.Write("<br></br>");
    writer.Write("<font color=green> A kliens-oldalon " +  HttpContext.Current.Request.Browser.Platform + " platform és " + HttpContext.Current.Request.Browser.Type + " böngésző fut.</font>");
  }
A konstruktorban elvégzünk néhány műveletet annak érdekében, hogy az osztály példányosításakor annak látható eredménye legyen.
A származtatott osztályban felülírtuk az ősosztály Write metódusát, hogy még egyedibb viselkedést adjunk a példány objektumunknak. Ez minden adatfolyamba íráskor tesz egy kis megjegyzést a szignifikáns kódhoz.
  public override void Write(string s)
  {
    HttpContext.Current.Response.Write(s + "<font size=1 color=yellow><br>(SoftwareOnline)</br></font>");
  }
}
A következőkben nincs más teendőnk, mint a létrehozott osztályt használni egy ASP.NET oldal kontroljainak írásához. Mindenekelőtt adunk egy referenciát a kódban felhasználandó, a Page osztály tagmetódusát képező CreateHtmlTextWriter metódusról:
CreateHtmlTextWriter
Osztály: Page
protected virtual HtmlTextWriter CreateHtmlTextWriter(
TextWriter tw
);
A Page osztályból származó osztályok esetén (mint amilyen ASP.NET oldalunk is) létrehoz és visszaad egy HtmlTextWriter objektumot, amely származtatott osztályokban a kontrolok kiírásához (ún. „Render-elés”) használható.
Paraméterek
TextWriter tw
A kiíráshoz használható absztrakt osztály, melynek metódusaival az írás történik.
Visszatérési érték
Egy HtmlTextWriter típusú objektum, melynek esetünkben saját viselkedést adtunk.
Hozzuk létre az oldal osztályát a Page osztályból származtatva. Az inicializáláshoz itt is az alaposztályt használjuk:
public class MyPage : Page
{
  public MyPage():base()
  {      
  }
A CreateHtmlTextWriter metódust használva hozzunk létre egy példányt a fent deklarált MyHtmlTextWriter osztályból:
  protected override HtmlTextWriter CreateHtmlTextWriter(TextWriter writer)
  {
    return new MyHtmlTextWriter(writer);
  }
Az oldal töltődésekor írjuk az adatfolyamba a szükséges HTML kódot a Render metódus felülírásával. Látható, hogy a saját MyHtmlTextWriter osztály Write függvénye fut, amikor a Render metódusban a paraméterben kapott HtmlTextWriter objektum meghívja azt. A művelet eredményeképpen megjelenik a szerver órájának aktuális időértéke, néhány megjegyzés kíséretében:
  protected override void Render(HtmlTextWriter writer)
  {         
    writer.Write("<br></br>");
    writer.AddAttribute("color", "red");
    writer.AddAttribute("size", "4pt");
    writer.RenderBeginTag(HtmlTextWriterTag.Font);
    writer.Write("Az idő a szerver szerint: " + System.DateTime.Now.ToLongTimeString());
    writer.RenderEndTag();
  }
}

Cikksorozat

#IDKategóriaCikk címeSorozat
4483WindowsSzoftverfrissítő szolgáltatások1. rész
4536WindowsA SUS szerver telepítése2. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 732. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |