Dinamikus szerveroldai erőforrás előállítása kamu ASPX oldalakkal

ASP.NET-ben szerveroldali erőforrás generálásra (például egy kép, vagy egy excel tábla) számtalan lehetőség létezik. Talán a legkorrektebb a saját HttpHandler készítése. Leggyakrabban mégis egy quick & dirty megoldást használok: a szerveroldali erőforrást egy kamu aspx oldallal generálom.

A módszer nagyon egyszerű, mégis mindig megfeledkezek a részletekről, ezért is próbálom most egy rövid bejegyzésben összefoglalni - magamnak biztosan - a szükséges lépéseket.

Nagyon röviden:

  1. Egy üres ASPX oldal hozzáadása a webalkalmazáshoz
  2. A HTML generálás felülbírálására az oldal void Render( HtmlTextWriter writer ) metódusának felülírásával
  3. A renderben az eddigi válasz-összeállítás törlése ( Response.Clear(); )
  4. Az általam generált válasznak megfelelő HTTP headerek beállítása ( pl: Response.AddHeader( "Content-Type", "image/gif" ); )
  5. A generált tartalom betolása a válaszba ( pl.: Response.BinaryWrite( content ); )

Jó, és akkor most jönne a (majdnem) mindig copy-pastelhető tipikus forráskódrészlet egy CSV file összeállítására :

    protected override void Render( HtmlTextWriter writer )
    {
        Response.Clear();
        Response.ContentEncoding = Encoding.GetEncoding( "iso-8859-2" );
        Response.AddHeader( "Content-Disposition", "attachment; filename=adatok.csv" );
        Response.ContentType = "application/vnd.ms-excel";
        Response.Write( GenerateExcel() );
        Response.Flush();
    }

Ha mondjuk az oldalt Excel.aspx-nek nevezem, és bárhonnan rálinkelek, akkor a linkre kattintók A GenerateExcel() metódusban összeállított CSV filet töltik le.



Dávid Zoltán

Dávid Zoltán Mérnök Informatikusként végeztem a BME-n, jelenleg webfejlesztéssel és gépi tanulással foglalkozom.

2008.05.30. 18:24:59 | Permalink | Hozzászólások: 2 | Tárgyszavak: ,


  • Active Directory lekérdezése T-SQL-ből

    Balássy György (MS RD, ASP.NET MVP, MCTS) Aki valaha is foglalkozott már az Active Directory-val az tudja, hogy a címtár felépítése gyökeresen eltér egy relációs adatbázis szerkezetétől. Nem elég, hogy az egyes elemek konténerekben helyezkednek el, melyek hierarchikus kapcsolatban állnak egymással, de egy konténeren belül teljesen különböző tulajdonságokkal bíró címtár objektumok is lehetnek. És mégis, van lehetőség arra, hogy az SQL Servernek megtanítsuk, hogyan kell lekérdezni a címtárat. Perverzek előnyben :) Tovább »
  • AJAX JavaScriptek összefűzése

    Gincsai Gábor Talán kevesen tudják, hogy az AJAXos JavaSriptek összefűzésésére nem csak az ASP.NET 4.0 lesz képes, hanem már jelenleg is, van beépített támogatás rá. Egészen pontosan az ASP.NET 3.5 SP1 óta létezik ez a megoldás. Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások


Dávid Zoltán Dávid Zoltán  (2008.05.31. 11:27:28)

Szerintem a megszokas es az, hogy egy ilyen oldal copy paste-tel telepitheto. En meg azert is csinalom neha ezt, mert van, hogy az aspx oldalt eredetileg teljesen normalisan hasznalom: mondjuk egy GridView van rajta. Aztan rateszek egy "letoltes" gombot, amit ha megnyomnak, akkor kiszedi a grid-bol az adatot, es az if-fel ellatott Render ilyenkor a fenti modon visszatolja az adatokat csv-ben. Kulonben pedig siman base.Render()-t hiv tovabb.

Gergő Gergő  (2008.05.30. 20:02:46)

Sosem értettem, hogy az emberek miért használják ezt szívesebben, mint egy ASHX handlert. Azzal van valami gond, vagy csak egyszerűen nem ahhoz szoktak?