<meta http-equiv='pics-label' content='(pics-1.1 "http://www.icra.org/ratingsv02.html" comment "ICRAonline EN v2.0" l gen true for "http://interval.cz" r (nz 1 vz 1 lz 1 oz 1 cz 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://interval.cz" r (n 0 s 0 v 0 l 0))' />
<p id='prepend'>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.</p>
<p>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 <a href='http://lab.msdn.microsoft.com/vs2005/'>stßhnout ze strßnek Microsoftu</a> a navφc si m∙₧ete <a href='http://www.microsoft.com/emea/msdn/betaexperience/'>nechat zadarmo zaslat DVD</a> 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 <em>Introducing Microsoft ASP.NET 2.0</em> od Dina Esposita.</p>
<h3>CodeBehind a jeho problΘmy</h3>
<p>Ve starΘ verzi ASP.NET existovaly dv∞ mo₧nosti, jak vklßdat do strßnky k≤d. Klasick² zp∙sob vlo₧enφ do elementu <code>script</code> s atributem <code>runat="server"</code>, 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∙:</p>
<ul>
<li>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 <a href='http://interval.cz/clanek.asp?article=2159' title='R∙₧iΦka, Pavel: CodeBehind na p°φkladu pro zcizenφ Flashe'>zcizenφ Flashe</a>.)</li>
<li>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.</li>
</ul>
<p>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.</p>
<p>Druhß verze ASP.NET proto zavßdφ dv∞ zm∞ny:</p>
<ul>
<li>Visual Studio implicitn∞ p°i vytvß°enφ webovΘho formulß°e CodeBehind neu₧φvß, k≤d vklßdß p°φmo (inline) do strßnky.</li>
<li>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.</li>
</ul>
<h3>Intermezzo</h3>
<p>Jedna z novinek jazyka C# v .NETu 2.0 je takzvanß <em>partial class</em>. V ΦeÜtin∞ zatφm terminologie nenφ ustßlena, nekamenujte mne tedy, prosφm, za u₧φvßnφ potencionßln∞ chybnΘho tvaru <em>ΦßsteΦnß t°φda</em>. 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".</p>
<p>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φ.</p>
<h3>Jak to vypadalo v prvnφ bet∞</h3>
<p>Zatφmco v rßmci CodeBehind webovß strßnka d∞dila soubor se zdrojov²m k≤dem a ten t°φdu <code>Web.UI.Page</code> (v∞tÜinou, programßtor m∙₧e vytvo°it vlastnφ zd∞d∞nou t°φdu od <code>Page</code> 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 <code>Page</code> (v∞tÜinou).</p>
<p>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φ.</p>
<h3>A jak to dopadne</h3>
<p>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ß°.</p>
<p>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>
<h4>P°φklad</h4>
<p>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 <code>Page</code> s nßzvem <code>CodeFile</code> 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 <code>Inherits</code>. Pozor na to, ₧e v prvnφ bet∞ se dneÜnφ <code>CodeFile</code> naz²valo <code>CompileWith</code> a <code>Inherits</code> zase <code>ClassName</code>.</p>
<p>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 <em>Default.aspx</em>:</p>
<p>Zdrojov² k≤d souboru <em>Default.aspx</em> 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∙.</p>
<p>Soubor se zdrojov²m k≤dem obsahuje deklaraci ΦßsteΦnΘ t°φdy a obsluhu udßlosti <code>OnClick</code> objektu tlaΦφtka.</p>
<h3>Shrnutφ</h3>
<p>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.</p>
<h3>Odkazy a zdroje</h3>
<ul>
<li><a href='http://msdn2.microsoft.com'>ASP.NET 2.0 dokumentace na novΘ verzi MSDN</a></li>
<li><a href='http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/Internals.asp'>ASP.NET 2.0 Internals</a> (Jayesh Patel, Bryan Acker, Robert McGovern)</li>
<li><a href='http://www.asp.net/Forums/ShowPost.aspx?tabindex=1&PostID=747775'>ASP.NET 2.0 product design changes between Beta 1 and Beta 2</a></li>
<li><a href='http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/migratefromaspnetto2.asp'>Migrating from ASP.NET 1.x to ASP.NET 2.0</a> (Jayesh Patel, Bryan Acker, Robert McGovern)</li>
<li><a href='http://blogs.msdn.com/danielfe/archive/2004/02/02/66463.aspx'>Playing with partial types</a> (Daniel Fernandez)</li>
<li><a href='http://weblogs.asp.net/asmith/archive/2004/04/14/112916.aspx'>Spaghetti, CodeInPage, CodeBehind, and CodeBeside</a> (Andy Smith)</li>
<div class='refer'><h3><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/serial.asp?serial=220' title='p°ehled Φlßnk∙ vΦetn∞ anotacφ'>Novinky v ASP.NET 2.0</a></h3><p>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!</p><ul><li><strong>CodeBeside v ASP.NET 2.0</strong> (prßv∞ Φtete)</li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3885'>Sprßva u₧ivatel∙ v ASP.NET 2.0</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3762'>Tvorba navigace v ASP.NET 2.0 - prvek Menu</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3743'>Master Pages v ASP.NET 2.0</a></li></ul></div>