Az ASP .NET programozási nyelv

Modellek

Egy ASP.NET oldal a a következő két részből áll:

A vizuális elemek kezelésére az ASP.NET két modellt bocsát rendelkezésünkre:

Mind a két modell nagyjából ugyanúgy működik. Ugyanazokat a control -okat és kódot használhatjuk mind a két esetben. Az alábbi kód a single-file model -re mutat példát:

<%@ Page Language="C#" %>
<script runat="server">
void Button1_Click(Object sender, EventArgs e)
{
 Label1.Text = "Clicked at " + DateTime.Now.ToString();
}
</script>
<html>
<head>
 <title>Single-File Page Model</title>
</head>
<body>
 <form runat="server">
 <div>
 <asp:Label id="Label1" runat="server" Text="Label">
 </asp:Label>
 <br />
 <asp:Button id="Button1" runat="server" onclick="Button1_Click" Text="Button">
 </asp:Button>
 </div>
 </form>
</body>
</html>

Single-file modell esetén a kódot script tag -ok között kell elhelyezni. A kód tetszőleges hosszúságú lehet, tartalmazhat az oldalon elhelyezett control -okhoz tartozó eseménykezelőket, metódusokat, property -ket és bármilyen kódot, amely egy osztályban előfordulhat. Futás közben egy single-file oldalt az ASP úgy kezel mint egy, a Page osztályból származó osztályt. Az oldal nem tartalmaz explicit osztály deklarációt, ehelyett a fordító egy új osztályt generál amely tartalmaz minden control -t mint member -t.

Megjegyzés: Nem minden a .NET által támogatott nyelv alkalmas code-behind fájlok létrehozására. A használni kívánt nyelvnek támogatnia kell a partial osztályokat. A J# például nem támogatja.

Az előbb felvázolt single-file model -nek megfelelő code-behind implementáció a következőképpen nézhet ki: Az .aspx file:

<%@ Page Language="C#" CodeFile="SamplePage.aspx.cs"
Inherits="SamplePage" AutoEventWireup="true" %>
<html>
<head runat="server" >
 <title>Code-Behind Page Model</title>
</head>
<body>
 <form id="form1" runat="server">
 <div>
 <asp:Label id="Label1" runat="server" Text="Label" >
 </asp:Label>
 <br />
 <asp:Button id="Button1" runat="server" onclick="Button1_Click" Text="Button" >
 </asp:Button>
 </div>
 </form>
</body>
</html>

A code-behind és a single-file model .aspx fájljában két különbség van. A code-behind .aspx fájljában nincs script blokk runat="server" attribútum. (Tartalmazhat script blokkot runat="server" attribútummal. Ebben kliens oldali kódot helyezhetünk el.) A második különbség az, hogy a code-behind .aspx fájljában a @Page direktívájában szerepelnek azok az attribútumok melyek az oldalhoz tartózó kód forrás fájljára, illetve osztályára hivatkoznak. Ezek az attribútumok kötik össze a .aspx file -t a hozzá tartozó implementációval.

A kód egy külön fájlba kerül. A következő példakód egy code-behind fájlra mutat példát:

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class SamplePage : System.Web.UI.Page
{
 protected void Button1_Click(object sender, EventArgs e)
 {
  Label1.Text = "Clicked at " + DateTime.Now.ToString();
 }
}

A code-behind file egy teljes osztálydeklarációt tartalmaz, amely a default névtéren jön létre. Az osztály partial -ként van deklarálva, ami azt jelzi, hogy nem az egész osztály van ebben a file -ban elhelyezve. Amikor az oldal fut, a fordító beolvassa a .aspx file -t és a forrás állományt - amit a @Page direktívában adtunk meg - és összeállítja egy osztályba, majd lefordítja. A partial osztályunk a Page osztály elemeit is örökli.

Melyik modellt használjuk?

A single-file és code-behind modell funkcionálisan megegyezik. Ugyanúgy futnak le és nincs a kettő között teljesítménybeli különbség se. Így hát a modellválasztás csak attól függ, hogy hogyan akarjuk a kódunkat szervezni, azaz fontos -e számunkra, hogy a designt elválasszuk a forrástól.

A single-file oldalak előnyei (a single-file modell olyan oldalaknál előnyös, melyeknél a kód elsősorban eseménykezelőkből áll):

A code-behind oldalak előnyei (a code-behind olyan projektek esetében előnyös, melyek nagy mennyiségű kódot tartalmaznak illetve nagyobb csapat dolgozik a fejlesztésen):

Az ebben a részben leírtak alapján a programunk 4 .aspx fájlból és a hozzájuk tartozó implementációs állományokból áll. Az .aspx fájlok közül egynek kitüntetett szerepe van, ennek speciálisan .master a kiterjesztése. A master állományok egységes kinézetet adnak az oldalainknak. Ez akkor hasznos, ha például olyan navigációs gombokat akarunk elhelyezni a felületen, melyeknek minden esetben elérhetőnek kell lenniük. Ebben az esetben a master oldalunk két linket tartalmaz, az egyikkel a kvíz kitöltését kezdhetjük meg, a másikkal az eddigi eredményeket tekinthetjük meg.

Az iQuiz.master állomány:

<%@ Master Language="C#" AutoEventWireup="true"
CodeFile="iQuiz.master.cs" Inherits="iQuiz" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<style type="text/css">
a:link {
color: #000000;
text-decoration: none;
}
a:visited {
color: #000000;
text-decoration: none;

}
a:hover {
color: #000000;
text-decoration: underline;
}
a:active {
color: #000000;
text-decoration: none;
}
</style>
</head>
<body bgcolor="#ffcc66">
<h1>iQuiz</h1>
<span style=" border-width: 1px; border-style: solid;
background-color: #ffcc00; padding: 5px 5px 5px 5px">
<asp:HyperLink ID="HyperLink1" runat="server"
NavigateUrl="~/restricted/Questions.aspx">Vetélkedő/asp:HyperLink>
<asp:HyperLink ID="HyperLink2" runat="server"
NavigateUrl="~/restricted/Results.aspx">Eredmények</asp:HyperLink>
</span>
<form id="form1" runat="server">
<div>
<asp:contentplaceholder contentplaceholder
id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</div>
</form>
</body>
</html>

Fontos megjegyezni, hogy nem a master oldalnál adjuk meg a hozzá tartozó oldalakat, hanem az.aspx állományoknál kell megadni, hogy melyik master fájl öleli körül. Az master oldal alá rendelt oldalak az <asp:contentplaceholder></asp:contentplaceholder> - helyére töltődnek be.