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:
<!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.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
- ASP.NET 2.0 dokumentace na novΘ verzi MSDN
- ASP.NET 2.0 Internals (Jayesh Patel, Bryan Acker, Robert McGovern)
- ASP.NET 2.0 product design changes between Beta 1 and Beta 2
- Asp.Net 2 - Kompilace
- Migrating from ASP.NET 1.x to ASP.NET 2.0 (Jayesh Patel, Bryan Acker, Robert McGovern)
- Playing with partial types (Daniel Fernandez)
- Spaghetti, CodeInPage, CodeBehind, and CodeBeside (Andy Smith)
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!
- CodeBeside v ASP.NET 2.0 (prßv∞ Φtete)
- Sprßva u₧ivatel∙ v ASP.NET 2.0
- Tvorba navigace v ASP.NET 2.0 - prvek Menu
- Master Pages v ASP.NET 2.0