Pealehed Asp.Net'is

From ICO wiki
Jump to navigationJump to search

Pealehed (Master Pages) on mõeldud rakenduses ühtse kujunduse või programsete elementide paigutuse hoidmiseks. Pealehed võimaldavad vältida või vähendada koodi dubleerimist ja lihtsustavad oluliselt rakenduse disaini ühtsustamist ning ka hilisemat haldamist. Lõppkasutajale on pealehed täiesti nähtamatud st leht, kus olete kasutanud pealehti, näeb veebisirvijas välja täpselt samasugune, kui leht, kus neid pealehti kasutatud ei ole. Tegemist on vahendiga, mis on mõeldud arendajatele produktiivsuse tõstmiseks.

Pealeht erineb tavalisest ASP.NET lehest selle poolest, et tema laiendiks on .master, lisaks muudele elementidele kirjeldatakse temas, kuhu võib panna programseid elemente ning kood pärineb klassist System.Web.UI.MasterPage.

Järgnevalt loomegi ühe lihtsa pealehe tavaline.master, kus näitame, kuhu tekivad lehekülje päis, menüü ning üks piirkond, kuhu aspx lehed saavad oma funktsionaalsuse paigutada.

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="tavaline.master.cs" Inherits="tavaline" %>
<!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>Minu esimene pealeht</title>
</head>
<body>
    <form id="form1" runat="server">
    <table>
        <tr>
            <td colspan = "2" >
                Siia tuleb lehekülje päis
            </td>
        </tr>
        <tr >
            <td>
                Siia ehitame menüü
            </td>
            <td>
                <asp:contentplaceholder id="sisu" runat="server" />
            </td>
        </tr>
    </table>
    </form>
</body>
</html>

Kuna hetkel sellel lehel mingit programset funktsionaalsust ei ole, siis on koodifail tavaline.master.cs sisuliselt tühi.

using System;
public partial class tavaline : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e) {}
}

Kui soovime, et meie default.aspx kasutaks seda pealehte, tuleb teha paar muudatust: lisada Page elemendi atribuutidesse MasterPageFile atribuut, nii et Page element näeb välja järgmine:

<%@ Page Language="C#" MasterPageFile="~/tavaline.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Minu teine leht" %>

Viidates ASP.NET rakendustes teistele failidele, kasutatakse tihtipeale faili absoluutset aadressi rakenduse kausta suhtes. Rakenduse juurkaustale viitamiseks kasutatakse tildet „~” e. kui me vaatame ülal olevat näidet, siis paikneb fail tavaline.master rakenduse juurkataloogis. Lisaks muudatusele lehekülje Page elemendi atribuutides, tuleb ära kustutada kõik, mis asub form elemendist väljaspool, kaasaarvatud form elemendi alustavad ja lõpetavad tagid. Selle asemele tulevad piirkonnad pealehelt. Seega näeb ülejäänud default.aspx välja järgmine:

<asp:Content ID="Content1" ContentPlaceHolderID="sisu" Runat="Server">
   <asp:Label ID="Label1" runat="server" />
</asp:Content>

Lehekülje koodis mingeid muudatusi teha ei tule.

Kui soovite kasutada mõnda pealehel olevat elementi või omadust aspx lehel, siis leiate lehe küljes oleva pealehe Page.Master omaduse alt. Samas pole see omadus otse kasutatav. See tähendab, kui näiteks teie pealehel on omadus jutt, siis ei ole võimalik seda muuta näiteks sellise lausega Page.Master.jutt = „mingi jutt”. Selleks, et saada ligi pealehe omadustele ja sealolevatele elementidele, tuleb Master all olev objekt teisendada õigesse tüüpi. Seega kui teie pealehe taga oleva klassi nimi on MinuPealeht, siis tuleks seal oleva omaduse jutt muutmiseks kirjutada järgnevalt:

((MinuPealeht)Master).jutt = mingi jutt;