× Aktuálně z oboru

Vychází Game Ready ovladače pro Far Cry 5 [ clanek/2018040603-vychazi-game-ready-ovladace-pro-far-cry-5/ ]
Celá zprávička [ clanek/2018040603-vychazi-game-ready-ovladace-pro-far-cry-5/ ]

Export obsahu stránky v ASP.NET

[ http://programujte.com/profil/2422-tomas-bosak/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/118-zdenek-lehocky/ ]Google [ ?rel=author ]       23. 6. 2007       14 612×

Jednoduchý tip ako exportovať (konkrétny) obsah stránky do určitého formátu.

Export obsahu webovej stránky do nejakého formátu za účelom uloženia je užitočnou funkciou napríklad aj tohto e-zinu. Implementácia exportu v technológii ASP.NET s použitím jazyka C# je jednoduchá záležitosť, ako je to možné vidieť na nasledujúcich riadkoch.

Stránka a obsah

Vo väčšine prípadoch sa neexportuje celá stránka kvôli postranným panelom, ako je napríklad menu. Potrebný obsah je preto najlepšie mať predformátovaný, a tak pripravený na možnosť jeho exportu ako nezávislej časti. Jeden zo spôsobov, ako to dosiahnuť, je napríklad použitie User controlu [ http://msdn2.microsoft.com/en-us/library/y6wb1a0e(VS.71).aspx ] alebo PlaceHolderu [ http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.placeholder.aspx ].

Príklad exportu ovládacieho prvku

Majme nasledujúci kúsok kódu, v ktorom chceme exportovať tabuľku do HTML súboru po kliknutí na button:

<table id="tblToExport" runat="server">
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
    </tr>
    <tr>
        <td>4</td>
        <td>5</td>
        <td>6</td>
    </tr>
    <tr>
        <td>7</td>
        <td>8</td>
        <td>9</td>
    </tr>
</table>
    
<br />
        
<asp:Button ID="btnExport" runat="server" Text="Export" OnClick="btnExport_Click" />

V globále sa získanie požadovaného obsahu zo stránky deje na základe ID ovládacieho prvku a StringWriteru [ http://msdn2.microsoft.com/en-us/library/system.io.stringwriter.aspx ]. Prvok sa nechá vyrenderovať pomocou metódy RenderControl [ http://msdn2.microsoft.com/en-us/library/system.web.ui.control.rendercontrol(VS.71).aspx ] do objektu typu HtmlTextWriter [ http://msdn2.microsoft.com/en-us/library/system.web.ui.htmltextwriter(VS.71).aspx ], ktorému sa určí StringWriter ako parameter pri vytváraní objektu.

System.IO.StringWriter sw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
tblToExport.RenderControl(hw);

Teraz je tabuľka v objekte sw. Spojazdnenie samotného exportu sa skladá zo zopár úkonov s triedou HttpResponse [ http://msdn2.microsoft.com/en-us/library/system.web.httpresponse.aspx ], ako je vyčistenie buffera, určenie typu obsahu a kódovania, pridelenie záhlavia a samotný zápis reťazca do výstupného prúdu. Po týchto príkazoch bude vyzerať event handler kliknutia na button nasledovne:

protected void btnExport_Click(object sender, EventArgs ea)
{
    // vycisti buffer
    Response.Clear();
    // urcenie typu obsahu
    Response.ContentType = "text/html";
    // kodovanie obsahu
    Response.ContentEncoding = System.Text.Encoding.UTF8;
    // zahlavie
    Response.AddHeader("content-disposition", "attachment;filename=table.html");

    // ziskanie obsahu prvku
    System.IO.StringWriter sw = new System.IO.StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    tblToExport.RenderControl(hw);

    // zapis do vystupneho prudu 
    Response.Write(sw.ToString());
    // ukoncenie
    Response.End();
}

V záhlaví je prvý parameter názov HTTP headera, do ktorého sa následne pridá hodnota predstavujúca druhý parameter. V tomto prípade ide o prílohu s názvom súboru table.html.

Ako typ obsahu sa dá určiť napríklad "application/ms-excel" a prípona súboru .xls. Týmto spôsobom bude exportovaný súbor možné otvoriť v Exceli, ktorý html syntax prekonvertuje na svoje použitie (aj keď sa nebude jednať priamo o excelovský súbor vzhľadom na to, že excel vytvára binárne súbory).


Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2007062102-export-obsahu-stranky-v-asp-net/ ].