Jednou z velkých předností systému ASP.NET je bezesporu snadné oddělení designu od logiky aplikace. Ještě dokonalejší oddělení přináší oddělení výkonného kódu do zvláštního souboru, zvaného CodeBehind. Výhodou je nejen přehlednost, ale také to, že tento CodeBehind můžeme použít beze změny i pro několik ASP.NET stránek.

Pro příklad, jak začít používat CodeBehind, si vytvoříme jednoduchou aplikaci, která by mohla sloužit jako pomůcka pro stahování souborů, které nelze běžně ze stránky stáhnout – jsou vložené ve stránce jako například flash, zvukový soubor a podobně. Pokud si ze stránky zjistíme URL, ani tak se nám nepodaří jednoduše soubor stáhnout, protože prohlížeč jej nezačne stahovat, ale rovnou jej zobrazí nebo začne přehrávat. Nechci se zabývat otázkou legálnosti takovéhoto počínání, v každém případě naše aplikace jen převezme od uživatele zadanou URL a vygeneruje odkaz, na kterém si již můžeme myší kliknout pravým tlačítkem a zvolit „Uložit jako“. Triviální, ale funkční, a navíc nám to skvěle poslouží jako ukázka pro pochopení principu CodeBehind.

Základem naší jednoduché aplikace bude formulář, tzv. Web Form:

<%@ Page Language=“C#“ %>
<%@ OutputCache Duration=“120″ VaryByParam=“*“ %>
<script language=“C#“ runat=“server“>
void OnConvert (Object sender, EventArgs e)
{
  DownLoad.Text = „<a href=\““ + txtURL.Text + „\“ style=\“font-weight:bold\“ target=\“_blank\“>Odkaz pro stažení</a>“;
  DownLoad.Visible = true;
}
</script>
<html>
<head><title>Ukázka CodeBehind</title></head>
<body>
<form runat=“server“>
<asp:textbox id=“txtURL“ runat=“server“ style=“width:300px“></asp:textbox>
<asp:Button Text=“Připravit ke stažení“ onclick=“OnConvert“ runat=“server“ />
<br /><br />
<asp:Literal Id=“DownLoad“ Visible=“false“ runat=“server“ />
</form>
</body>
</html>

HTML kód je očesán na minimum, aby byla ukázka funkční, a ne nepřehledná, zvolen je jazyk C# – prohlédněte si ukázku. Ve formuláři vidíte webový ovládací prvek textového pole a prvek odesílacího tlačítka. Odesílací tlačítko je přes onclick navázáno na obslužnou funkci OnConvert – jakmile se klikne na tlačítko, formulář se odešle. Při tomto zpracování je již vyhodnocena událost OnConvert, převezme se hodnota textového pole a pomocí prvku Literal je zviditelněn odkaz ke stažení zadaného souboru.

Všimněte si, že prvek Literal, který jsem použil pro zobrazení odkazu, má nastavenu vlastnost Visible=“false“. Dokud nedojde k odeslání formuláře tlačítkem, nedojde ke zpracování obsluhy OnConvert a tento prvek nebude vůbec ve stránce vidět (jeho renderování je potlačeno). Prvek se zobrazí až nastavením vlastnosti Visible na true v průběhu zpracování obsluhy kliknutí na tlačítko, kde se také vlastnost Text nastaví na kompletní tvar odkazu včetně zadané URL.

Tolik k tedy k funkci samotné ukázky. Dále si ukážeme, jak obslužný skript vyjmout do zvláštního souboru – tedy do zmíněného CodeBehind („kódu v pozadí“). Nejprve si připravíme „očesanou“ aspx stránku s deklarací CodeBehind, který dopíšeme následně:

& lt;%@ Page Language=“C#“ Inherits=“MyDemo“ Codebehind=“MyCodeBehind.aspx.cs“ Src=“MyCodeBehind.aspx.cs“ %>
<%@ OutputCache Duration=“120″ VaryByParam=“*“ %>
<html>
<head><title>Ukázka CodeBehind</title></head>
<body>
<form runat=“server“>
<asp:textbox id=“txtURL“ runat=“server“ style=“width:300px“></asp:textbox>
<asp:Button Text=“Pøipravit ke sta?ení“ onclick=“OnConvert“ runat=“server“ />
<br /><br />
<asp:Literal Id=“DownLoad“ Visible=“false“ runat=“server“ />
</form>
</body>
</html>

Ve stránce nám zbyl skutečně jen HTML kód a direktivy stránky (pro ukázku je zde zvoleno cachování po dobu 2 minut). Navíc přibyla deklarace třídy (atribut Inherits), kterou chceme z našeho CodeBehind použít, tj. tu, která rozšiřuje možnosti naší stránky. Jak uvidíme později, do jednoho souboru CodeBehind si totiž můžeme připravit několik tříd a používat je pro různé stránky. Dále vidíme určení zdroje souboru s CodeBehind, pokud nepoužíváme Visual Studio anebo později nepřeneseme překompilovaný kód na patřičné místo (adresář Bin), je třeba nadefinovat i atribut Src.

Vyjmutý kód skriptu pak vložíme do připravovaného souboru MyCodeBehind.aspx.cs. Jméno může být prakticky libovolné, ovšem konvence typu stránky (aspx) a jazyka (cs) je více než doporučena, snadno se tak vyznáte, který CodeBehinde se vztahuje ke kterému souboru vaší aplikace.

Jelikož se v případě CodeBehind již jedná o běžný zdrojový kód jazyka C#, nikoli o stránku ASP.NET (tento kód by pak bylo možné použít v jakékoli .NET aplikaci, nikoli jen ve stránce ASP.NET), musíme explicitně provést import prostorů názvů (namespaces), které budeme potřebovat pro práci s naší ASP.NET aplikací. Dále nadefinujeme třídu, ve které si nadefinujeme datové složky a metody pro práci s naší aplikací. Původní část skriptu z aspx stránky se tedy změní takto:

using System;
using System.Web; // zavedení potřebných namespaces
public class MyDemo : System.Web.UI.Page // deklarace veřejné třídy
{
  protected System.Web.UI.WebControls.Literal DownLoad; // protected prvek Literal ovládaný v naší aplikaci
  protected System.Web.UI.WebControls.TextBox txtURL; // protected prvek TextBox v naší aplikaci
  public void OnConvert (Object sender, EventArgs e)  // veřejná obsluha události OnConvert
  {
    DownLoad.Text = „<a href=\““ + txtURL.Text + „\“ style=\“font-weight:bold\“ target=\“_blank\“>Odkaz pro stažení</a>“;
    DownLoad.Visible = true;
  }
}

Jak vidíte, vytvořit ze stávající aplikace CodeBehind, který pak můžeme používat ve všech stránkách, je sice trochu „ukecané“, ale velmi přehledné, logické a hlavně dovede ušetřit spoustu práce v budoucnu s rozšiřováním a úpravami aplikace. Do jisté míry tento způsobu nahrazuje také dříve používanou metodu include, která, co se týče přehlednosti kódu, byla spíše cestou do pekel. Používejme proto CodeBehind všude tam, kde, počítáme s využitím ve více stránkách nebo tam, kde chceme snadné a přehledné úpravy ať už funkce nebo designu.

Jak zakomponovat CodeBehind do vlastních ovládacích prvků si ukážeme v dalším pokračování. Ukázku si můžete stáhnout.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět