Navigace

Hlavnφ menu

 

CodeBeside v ASP.NET 2.0

Novß verze znßmΘ technologie pro tvorbu webov²ch aplikacφ zasßhla samotnΘ srdce vytvß°enφ v²slednΘ strßnky. Poj∩me se podφvat na vylepÜenou verzi technologie CodeBehind.

Hned na zaΦßtek bych rßd uvedl, ₧e p°ed nedßvnem Microsoft vydal druhou betu Visual Studia .NET codename Whidbey. Express verze produkt∙ si m∙₧ete stßhnout ze strßnek Microsoftu a navφc si m∙₧ete nechat zadarmo zaslat DVD s Visual Studiem Team Systems, nejvyÜÜφ chystanou verzφ Visual Studia (kterou si mohou p°edplatitelΘ MSDN ze server∙ Microsoftu i stßhnout). Pokud tΘto nabφdky vyu₧ijete, Microsoft vßm navφc dß p°φstup ke t°em publikacφm o novinkßch v .NET Frameworku 2.0, vΦetn∞ vcelku zajφmavΘ prßce Introducing Microsoft ASP.NET 2.0 od Dina Esposita.

CodeBehind a jeho problΘmy

Ve starΘ verzi ASP.NET existovaly dv∞ mo₧nosti, jak vklßdat do strßnky k≤d. Klasick² zp∙sob vlo₧enφ do elementu script s atributem runat="server", takzvan² inline k≤d, a model CodeBehind, kter² veÜkerΘ obsluhy udßlostφ a dalÜφ programovΘ k≤dy "uklidil" do pomocnΘho souboru. To p°inßÜelo n∞kolik problΘm∙:

  • Soubor CodeBehind musel neustßle v∞rn∞ kopφrovat ASPx formulß°. Existoval-li na strßnce TextBox, se kter²m se v aplikaci pracovalo, bylo t°eba tuto t°φdu zavΘst takΘ do CodeBehind souboru jako datovou slo₧ku a pracovat skrze ni. Pokud jste provedli podstatn∞jÜφ zm∞ny v jednom souboru a na druh² jste zapomn∞li (co₧ se bez Visual Studia jako editoru stalo snadno), vedlo to ke zbyteΦn²m chybov²m hlßÜenφm. (P°edstavu ,jak to fungovalo, si m∙₧ete ud∞lat na jednoduchΘm p°φkladu o zcizenφ Flashe.)
  • Zatφmco CodeBehind soubor pro urΦit² WebForm se kompiloval do sestavenφ spoleΦnΘho s ostatnφmi soubory s programov²m k≤dem, samotnß ASPx strßnka do sestavenφ vlastnφho. To mohlo u v∞tÜφch projekt∙ znamenat nßkladn² mezikrok v podob∞ p°ekompilovßnφ vÜech CodeBehind soubor∙ kv∙li drobnΘ ·prav∞. Navφc tu existoval nesoulad mezi pracφ Visual Studia, kterΘ vy₧adovalo pro odkaz na soubor s k≤dem atribut CodeBehind, a ASP.NET runtime, kterΘ tuto konstrukci neznß a pro odkaz na soubor vy₧aduje atribut SRC.

Tyto problΘmy se mohou n∞komu zdßt malichern²mi, na druhou stranu si musφme uv∞domit, ₧e v²hody odd∞lenφ k≤du od prezentaΦnφ vrstvy se projevujφ jak v p°φpad∞ inline k≤du, tak v technologie CodeBehind prakticky stejn∞. Nenφ toti₧ mnoho p°φpad∙, kdy m∙₧ete jeden CodeBehind soubor pou₧φt pro dv∞ r∙znΘ strßnky.

Druhß verze ASP.NET proto zavßdφ dv∞ zm∞ny:

  • Visual Studio implicitn∞ p°i vytvß°enφ webovΘho formulß°e CodeBehind neu₧φvß, k≤d vklßdß p°φmo (inline) do strßnky.
  • Explicitn∞ si m∙₧ete vytvo°enφ separßtnφho souboru vy₧ßdat. Technologie v tomto p°φpad∞ u₧itß je vÜak inovovanß, a proto se jφ Φasto mφsto CodeBehind °φkß CodeBeside.

Intermezzo

Jedna z novinek jazyka C# v .NETu 2.0 je takzvanß partial class. V ΦeÜtin∞ zatφm terminologie nenφ ustßlena, nekamenujte mne tedy, prosφm, za u₧φvßnφ potencionßln∞ chybnΘho tvaru ΦßsteΦnß t°φda. Umo₧≥uje nßm jednoduÜe rozd∞lit t°φdu na dva a vφce kus∙ a ka₧d² umφstit do jinΘho souboru. Syntaxe je zcela shodnß s normßlnφ deklaracφ t°φdy s tφm, ₧e u obou t°φd uvedeme modifikßtor "partial". Ve VB.NET je situace velmi podobnß, pouze pou₧itΘ klφΦovΘ slovo je "Expands".

VS.NET 2005 toho vyu₧φvß nap°φklad u WinForms k odd∞lenφ Φßstφ k≤du vytvß°ejφcφch komponenty (co₧ je prßce vizußlnφho editoru) a programßtorov²ch zdrojov²ch k≤d∙ obsahujφcφch obsluhy udßlostφ.

Jak to vypadalo v prvnφ bet∞

Zatφmco v rßmci CodeBehind webovß strßnka d∞dila soubor se zdrojov²m k≤dem a ten t°φdu Web.UI.Page (v∞tÜinou, programßtor m∙₧e vytvo°it vlastnφ zd∞d∞nou t°φdu od Page a tu pak pou₧φt jako base class sv²ch strßnek), zde bylo navr₧eno, aby webovß strßnka byla ΦßsteΦnou t°φdou ke CodeBeside souboru a tato sjednocenß t°φda d∞dila Page (v∞tÜinou).

Je to podstatn∞ logiΦt∞jÜφ cesta a navφc p°i jejφm u₧itφ odpadajφ v²Üe zmφn∞nΘ problΘmy. V CodeBeside souboru nenφ ji₧ t°eba urΦovat, kterΘ ₧e to prvky jsme na strßnce u₧ili, nebo¥ pracujeme p°φmo s prvky t°φdy strßnky. Navφc se ob∞ ΦßsteΦnΘ t°φdy kompilujφ do spoleΦnΘho sestavenφ.

A jak to dopadne

Tato implementace CodeBeside se vÜak z°ejm∞ ukßzala b²t p°φliÜ razantnφ (zejmΘna odstran∞nφ mo₧nosti zkompilovat vÜechny programovΘ k≤dy do jednoho souboru z°ejm∞ vadila), Microsoft v druhΘ Bet∞ ustoupil a v²slednß verze je n∞co mezi ob∞ma verzemi. Hlavnφ zm∞na oproti prvnφmu nßvrhu verze 2.0 spoΦφvß v tom, ₧e ze souboru s programov²m k≤dem se nynφ stejn∞ jako v CodeBehind modelu d∞dφ vlastnφ webov² formulß°.

Upadla tedy ΦßsteΦnß t°φda v zapomn∞nφ? V∙bec ne. Zmφn∞n² neduh CodeBehind, spoΦφvajφcφ v p°episu prvk∙ u₧it²ch v ASPx souboru, je toti₧ odstran∞n tφm, ₧e ASP.NET p°i po₧adavku na strßnku vytvo°φ ΦßsteΦnou t°φdu obsahujφcφ tyto deklarace prvk∙ a tu pou₧ije jako ΦßsteΦnou t°φdu k programovanΘmu k≤du.

P°φklad

K u₧itφ bude t°eba znßt syntaxi odkazu na soubor s programov²m k≤dem z ASPx strßnky. Nßzev tohoto souboru je parametrem direktivy Page s nßzvem CodeFile a nßzev t°φdy strßnky, kter² musφ b²t shodn² s nßzvem ΦßsteΦnΘ t°φdy v souboru s programov²m k≤dem, je v parametru Inherits. Pozor na to, ₧e v prvnφ bet∞ se dneÜnφ CodeFile naz²valo CompileWith a Inherits zase ClassName.

Ukßzku prßce CodeBeside si m∙₧eme ud∞lat na trivißlnφm p°φkladu vlo₧enφ dat do formulß°e. ZaΦneme souborem Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
   <title>Titled Page</title>
</head>
<body>
   <form id="form1" runat="server"><div>
      Vlo₧te sv∙j nßzor.<br /><br />
      Nadpis:<br />
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /><br />
      Komentß°:<br />
      <asp:TextBox ID="TextBox2" runat="server" Height="160px" TextMode="MultiLine" Width="336px"></asp:TextBox><br /><br />
      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Komentuji" /><br /><br />
      <asp:Literal ID="Literal1" runat="server"></asp:Literal>
   </div></form>
</body>
</html>

Nßsleduje soubor Default.aspx.cs:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using System.Net.Mail;

public partial class _Default : System.Web.UI.Page
{
   protected void Button1_Click(object sender, EventArgs e)
   {
      Literal1.Text = "Nßzor byl vzat v potaz.";
      SmtpClient SC = new SmtpClient();
      SC.Send("bezvyznamnyForm@dulezitaSluzba.cz",
         "spam@autorSluzby.cz",
         TextBox1.Text,
         TextBox2.Text);
   }
}

Zdrojov² k≤d souboru Default.aspx mi vygeneroval program Visual Web Developer Express 2005 p°edtφm, ne₧ spadnul p°i pokusu o spuÜt∞nφ projektu (po°ßd je to p°ece jenom pouhß betaverze). Jak vidφte, k≤d je XHTML validnφ a bude i po vygenerovßnφ obsahu serverov²ch prvk∙.

Soubor se zdrojov²m k≤dem obsahuje deklaraci ΦßsteΦnΘ t°φdy a obsluhu udßlosti OnClick objektu tlaΦφtka.

Shrnutφ

Po mφrn²ch zmatcφch z∙stala hlavnφ v²hoda pro programßtory nepracujφcφ pod Visual Studiem - nenφ t°eba znovu definovat ovlßdacφ prvky v souboru s programov²m k≤dem. Model pou₧it² v druhΘ bet∞ podle vÜeho bude i ve finßlnφ verzi.

Odkazy a zdroje

Lßnsk², LukßÜ (20. 5. 2005)

Novinky v ASP.NET 2.0

Nov² .NET Framework p°inßÜφ i novΘ mo₧nosti pro v²vojß°e web-based aplikacφ, v podob∞ nov²ch prvk∙ a mechanism∙ ASP.NET 2.0. KrßtkΘ seznßmenφ s vybran²mi novinkami vßm urΦit∞ napom∙₧e p°i p°echodu na novou verzi tΘto platformy. Tato sΘrie Φlßnk∙ dosud nebyla ukonΦena!