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 alebo PlaceHolderu.
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. Prvok sa nechá vyrenderovať pomocou metódy RenderControl do objektu typu HtmlTextWriter, 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, 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).