aspresimMaster Page ilk olarak ASP.NET 2.0 ile gelmiştir ve çok önemli bir özelliktir. Master Page, web kullanıcı kontrollerine çok fazla benzemektedir. Kullanıcı kontrollerinden farkı, HTML ve diğer kontrollerin bir arada tümleşik halde bulunabilmesidir. Master Page, ek özelliklerle, olaylarla, metotlarla geliştirilebilir ve yine web kullanıcı kontrolleri gibi son kullanıcı tarafından direkt olarak görüntülenemezler. Mutlaka bir web form içinde yer alırlar ya da directive edilirler diyebiliriz.

Master Page mantığı aslında bizim yapmış olduğumuz projelerin temel yapısını oluşturma amaçlı kullanılır. Yani bir Master Page ile genel olarak tüm sayfalarımda olabilecek özellikleri, komponentleri, web kullanıcı kontrollerini bir master page içinde oluşturabilir ve daha sonra bu master page’i istediğim web formlarında kullanabilir ve istediğim web formu çok daha hızlı, dinamik, daha performanslı bir şekilde oluşturabilirim.

Bir Master Page birden çok web formu barındıran bir şablondur aslında yani bir template’dir. Örneğin bir master page, her web sayfasında olan header, footer, navigation bar gibi elementleri barındırabilir ve bunu daha sonra tüm sayfalarımızda kullanabilmek için bize kolaylık sağlayabilir.

Master Page dosyalarının uzantısı .net ortamında master‘dır. Ayrıca tıpkı web formları ve web user kontrolleri gibi codebehind dosyalarını destekler. Tüm master page dosyaları System.Web.UI.MasterPage sınıfından miras almaktadırlar.

WEB sayfalarımızı oluştururken sayfa yapılarımızı oluşturma esnasında Master Page veya WEB User kontrolleri kullanmamız bize modifikasyon ya da sitemizi büyütme, geliştirme, genişletme aşamasında büyük kolaylıklar sağlar. Sayfalarımızda bu özellikleri kullandığımızda ileride sadece bir master page yapısını ya da bir web user kontrol yapısını değiştirerek çok basit ve hızlı bir şekilde tüm sayfalarımızda gerekli düzenlemeleri yapabiliriz.

Daha önce bahsettiğim gibi bir master page HTML ve çeşitli asp kontrolleri kullanılarak inşaa edilebilir. Özel olarak bir ContentPlaceHolder kontrolü kullanılır. ContentPlaceHolder bir yer tutucudur.Bu yer tutucuda ilgili web formunun ihtiyaç duyduğu kontroller her ne ise bu yer tutucu içinde tutulurlar. Bir Master Page oluştururken , ve tagleri kullanılır.

Basit bir Master Page nasıl hazırlanır bunu örneklemek istiyorum. Diyelim ki bir çok sayfadan oluşan bir web sitemiz mevcut. Bu sayfaların hepsinde standart olarak bir header, footer ve navigasyon menü olmuş olsun. Tabi biz bunları yapmayacağız :)) Bir varsayım gibi.. Yani aşağıdaki gibi bir yapıya sahip olan, sayfalarımız olsun.

Resime göz atalım burada header, menu ve footer diyelim ki her sayfamızda aynı olacak, içerik ise sayfadan sayfaya değişecek. Dolayısı ile buradaki en mantıklı başvurulacak yöntem her sayfam için genel bir şablon oluşturmam yani bir master page oluşturmam. Master Page’de Header, footer ve menu olacak ayrıca content olacak, fakat diğer üç kısım standart olarak kalacak. Content ise sayfadan sayfaya değişebilecek. Bu şekilde bir yapı kurmak istiyorum.

Şimdi bu örnek tabi basit bir örnek olsun diye belirttim dolayısı ile bir menü oluşturmayacağım. Header, footer ve içerik yani content alanı için placeholder oluşturacağım.

Öncelikle WEB Site projemize bir adet master page ekliyoruz. Add New Item deyip, Master Page ekliyoruz, dosyamın adı bende MasterPage.master herhangi bir değişiklik yapmadım. Sayfam oluşturulduğunda kod bloğunda tagini görebilirsiniz. Direktmen bir yer tutucu eklenmiş durumda. Yani ilk aşamada kod bloğum şu şekilde :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
 
 
 
 
 
    <title></title>
    <asp:contentplaceholder id="head" runat="server">
    </asp:contentplaceholder>
 
 
    <form id="form1" runat="server">
    <div>
        <asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
         
        </asp:contentplaceholder>
    </div>
    </form>

Görüldüğü gibi bu kod bloğundada dikkat edileceği üzere master page önemli bir detay dışında tıpkı bir web formu gibi. Peki nedir bu önemli detay?

Boş bir ContentPlaceHolder kontrolünün eklenmiş olması tabii ki. Şimdi header kısmında bir hoşgeldiniz yazısı, footer kısmında bir copyright yazısı olsun. Kodlarımı şu şekilde düzenliyorum. Yani benim header ve footer alanım standart. Menu yapmayacaktık zaten, ayrıca bu örneğimiz çok basit bir örnek, sadece mantığı kapmak için 🙂

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
 
 
 
 
 
    <title></title>
    <asp:contentplaceholder id="head" runat="server">
    </asp:contentplaceholder>
 
 
    <form id="form1" runat="server">
    <div><h1>WEB Sitemize Hoşgeldiniz</h1>
        <asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
         
        </asp:contentplaceholder>
        <p>Copyright Falan Filan</p>
    </div>
    </form>

Görüldüğü gibi content alanım boş, çünkü ben bu kısmı sayfadan sayfaya değişsin istiyordum.

Şimdi uygulamama bir adet aspx form yani web form ekliyorum. Benim dosyamın adı default.aspx. Bu dosyayı eklerken açılan pencerede dikkat etmem gereken bir nokta var, visual studio 2010 kullanıcıları sağ altta “select master page” kutucuğunu görebilirler, bunu işaretliyoruz. Tam olarak şurada :

Daha sonra açılan pencereden ilgili master page’i seçin. Böylelikle Visual Studio bizim için ilgili kodu oluşturacağımız WEB forma ekleyecek.Tam olarak eklenen kod bizim örneğimiz için şu :

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

Bu kodu tabi web form eklerken eğer select master page kısmını seçmezsek manuel olarak da ekleyebiliriz, hiç sorun değil.

Eklemiş olduğumn web formu şu şekilde düzenliyorum.

1
2
3
4
5
6
7
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
 
<asp:content id="Content1" contentplaceholderid="head" runat="Server">
</asp:content>
<asp:content id="Content2" contentplaceholderid="ContentPlaceHolder1" runat="Server">
<h3>Sitemize tekrardan hoşgeldiniz, umarız sitemizden memnun kalırsınız.</h3>
</asp:content>

Aynı şekilde bir web form daha ekliyorum adını hakkimizda.aspx veriyorum ve yine bu formuda masterpage ile bağlıyorum, ilgili kodları şu şekilde :

1
2
3
4
5
6
7
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Hakkimizda.aspx.cs" Inherits="Hakkimizda" %>
 
<asp:content id="Content1" contentplaceholderid="head" runat="Server">
</asp:content>
<asp:content id="Content2" contentplaceholderid="ContentPlaceHolder1" runat="Server">Hakkımızda denecek o kadar çok şey var ki,
biz şirket olarak en iyisini sizler için yapmaya hazırız.
</asp:content>

Görüldüğü gibi örnek oldukça basit. Zaten benimde burada anlatmak istediğim görüldüğü üzere bir master page üzerinden rahatlıkla istediğimiz kadar web form hazırlayabilmemiz. Örnekte bir adet ContentPlaceHolder kullandım, bunların sayısı çok daha fazla olabilir tabii ki.