mehmetduran.com - Paylaşmak Güzeldir...
Asp.net'te Master Page'i Etkin Kullanma
Bu yazımda Master Page olayını etkin olarak nasıl kullanabileceğimizden bahsedeceğim. Birçok proje Master Page yapısı kullanılarak hazırlanmakta. Ancak bu işe yeni başlayanlar Master Page'in sadece sayfanın bir bölümünü etkilediğini düşünür veya düşünmese de hep böyle kullanır. Ancak Master Page yapısını etkin kullanabilmek için oluşturduğumuz sisteme göre sayfamızı bölmeliyiz. En basit şekliyle düşünürsek sistemin bir content bölümü bir de header bölümü olsun. İçerik bölümünde kullanıcıların göreceği yapıları oluştururuz. Header bölümünde de arama motorları için bilgiler, script ve css dosyaları olur. Master Page kullanırken bu şekilde bölümler oluşturmalı ve her sayfayı bu yapıya göre tasarlamalıyız. Bu yapı bizleri birçok sorundan kurtaracak ve kolaylıklar sağlayacaktır.

Master Page kullanırken sayfamızı bölümlere bölmeli (ContentPlaceHolder) ve bu yapıyı kullanacak olan sayfalarımızı da bu şekilde tasarlamalıyız. Böyle bir sistem bizlere çok kolaylık sağlayacaktır. Örnekte de söylediğim gibi tanımlayacağımız header bölümünü her sayfada dinamik olarak doldurabileceğiz. Bu durum url rewrite durumlarında oluşan css ve script dosya sorunlarını ortadan kaldıracaktır. Ayrıca her sayfada sayfa başlığı, meta tagları rahatlıkla header bölümü yardımıyla oluşturabileceğiz. Bunu gibi oluşturacağımız sistemde reklam alanı, kendimize özel alanlar oluşturabiliriz.

Asp.net MVC teknolojisine göz attığımızda tamamen bu şekilde bir yapının kullanıldığını görebiliriz. Bu da MVC ile çok daha rahat çalışmamızı sağlıyor. Server taraflı kodlara pek girmeden birçok işlemi tamamlayabiliyoruz. Örnek verecek olursak bir Master Page ve bir sayfanın yapısı şu şekilde olabilir.

//Master Page Yapımız
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <asp:ContentPlaceHolder id="head" runat="server"></asp:ContentPlaceHolder>
</head>
<body>
    <asp:ContentPlaceHolder id="content" runat="server"></asp:ContentPlaceHolder>
</body>
</html>
 
//Master Page'i Kullanacak Herhangi Bir Sayfa
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    <link href="StyleSheet.css" rel="stylesheet" type="text/css" />
    <script src="jquery-1.2.6.pack.js" type="text/javascript"></script>
    <title>Anasayfa</title>
    <meta name="description" content="Masterpage kullanımı." />
    <script>
        var aktif_menu = 0;
    </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="content" Runat="Server">
    <!-- sayfa içeriği buraya gelecek -->
</asp:Content>

Bu yapıya göre basit bir örnek hazırladım. Bu örnekte sayfaların header bölümünü dinamik olarak oluşturuyoruz ve bu bölümde sayfa başlığı, meta tag tanımlaması ve tanımlayacağımız script bir değişken ile aktif menü işlemi gerçekleştireceğiz. Bunları yapmak için hiçbir server taraflı kod yazmadım ve en az kodlama ile de bu sistemi yazmaya çalıştım. Bu şekilde Master Page yapısını etkin olarak nasıl kullanabileceğimizden bahsetmeye çalıştım. Örneği buradan görebilir ve buradan indirebilir ve inceleyebilirsiniz.

Bu yazıyı yazmadan önce Master Page ile birçok proje hazırladım. Bu süreçte ve Asp.net MVC teknolojisi ile ilgilendiğim süreçte Master Page'in etkili kullanılması hakkında bu yazıyı yazmaya kara verdim. Umarım bu yazım ilgilenenlere ve yeni ilgilenmeye başlayanlara bir fikir verir.

İyi Çalışmalar.
Mehmet Duran 17 Haziran Çarşamba 2009 13 35131 4,3
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar Sayfaların Oluşma Sürelerini Hesaplama (HttpModule Kullanarak) Asp.net MVC'de View ve MasterPage için CodeBehind Tanımlama Asp.net ile Dosyaları Okuma ve İçeriğini Değiştirme Asp.net MVC'de Kullanıcı Kontrolü (User Control) Kullanımı Asp.net'te Kendi Kontrollerimizi Oluşturmak
Yorumlar
Yorum Yaz
RSS Yorum Takibi
Ender 24 Aralık Perşembe 2009 18:01 #1
Merhaba ... Güzel bir çalışma ancak farzedelim ki benim bir categori sayfam war ve kategori sayfasından kategoriid sini querystring ile ürün sayfasına yünlendirdim. Ürünler sayfasında da datalist veya repeater ile listeledim. Sorun: burada meta tağları ve özellikle title ' yi otomatik olarak <%#Eval("UrunAdi")%> olarak gösterebilir miyiz.? Elle yazında oluyor ama veritabanından çekebilir miyiz .? Ben denedim ama olmadı acaba başka bir şey daha mı yapmak gerekiyor .? Teşekkürler ...
Mehmet Duran 24 Aralık Perşembe 2009 19:47 #2
Merhaba. Zaten amacım bu bilgileri dinamik olarak nasıl yapabileceğimizi göstermekti. Ancak senin söylemiş olduğun gibi Eval nesnesi ile bu işlemleri yapmak imkansız. Eval nesnesi sadece data kontrolleriyle kullanılıyor. Sayfanın başlığını veya meta bilgilerini veritabanındaki verilerle eşleştirmek için verileri aldıktan sonra (datatable'a veya başka nesnelere) aldığın verinin içinden istediğini çekip, sayfa başlığına veya meta taglarına aktarmalısın.
kemal 02 Mayıs Pazar 2010 16:53 #3
merhaba.bir aspx sayfamda masterpage in bir bölümünde değişiklik yapıyorum.Yani Master.findcontrol.. şeklinde ama bu işlemi yaptıktan sonra başka bir sayfaya yönlendirdiğimde masterpage içindeki o bölüm ilk şekline dönüyor.(o sayfa da masterpage bağlı) Yani ben masterpage de dinamik olarak değişiklik yapıyorum ama masterpage hersayfada tekrar yüklendiğiden ilk konumuna dönüyor. yani ben birsayfada masterpage müdahale ettikten sonra bu masterpage bağlı sayfalarda da o şekilde görünsün istiyorum.
kemal 02 Mayıs Pazar 2010 16:53 #4
Bunu nasıl yapabilirim?sindiden tesekkurler..
Mehmet Duran 02 Mayıs Pazar 2010 17:08 #5
Merhaba. Tam olarak ne yapmak istediğini anlamadım ama bir sayfada değişiklik yaptığında yaptığın değişikliğin her yerde tutarlı olmasını istiyorsan verileri bir yerde (veritabanı) tutman gerekir. Sayfa yüklenirken verileri veritabanından alırsın ve değişiklik yaptığında da veritabanına yazarsın. Böylece sorun olmaz.
kemal 02 Mayıs Pazar 2010 17:30 #6
daha açık olarak masterpage de iki panelim var bunlardan birisi uyegirişi diğeri giris yapıldıktan sonra göstermek istediğim kullanıcı paneli(burda çıkış linki var)Sayfa ilk yüklenirken ilk panel açık ama giris yapıldıktan sonra ikinci paneli açmak ve çıkış yapana kadar diğer sayfalarda da gezinirken hep ikinci panelin açık kalmasını sağlamaya çaılşıyorum(yenibiriş.com gibi) buna midahale ediyorum ama diğer sayfalara geçtiğimde masterpage tekrar yüklendiği için birinciyi açıp ikinciyi kapatıyor?
Mehmet Duran 02 Mayıs Pazar 2010 17:44 #7
Bu konuda üyenin giriş yapıp yapmadığını tutman lazımki ona göre panellerden hangisinin açık olacağına karar veresin. Her yeni yüklenişte panellerden istediğin gelmiyorsa bir yerde bir eksiklik vardır.
kemal 03 Mayıs Pazartesi 2010 15:58 #8
tüm kontrolleri yapıyorum neyse.herhalde şurdan kaynaklanıyor:Bir sayfa düşünelim default.aspx burada çıkış linki var.Bu linke tıklanılınca Formauthentications.signout() yapıyorum.(web config izinlerini de yaptım)bu linke tıklanıldıkan sonra browserı kapatmadan defult.aspx e tekrar girince(ctrlc ctrlv)açılıyor? ama f5 yaptığımda web config de yaptığım ayarlar doğrultusunda login.aspx e gidiyor.Neden böyle oluyorf5 farkıne bu sırada postback durumlarını da kontrol ettim(yani ispostbackolupolmama
Mehmet Duran 03 Mayıs Pazartesi 2010 23:59 #9
Sanırım tarayıcılardaki cache durumundan bahsediyorsun. Bu durum sadece senin için değil çoğu site için geçerli. Tarayıcılar daha önce açılmış sayfaları genelde cache'den alıyorlar. F5 tuşu yeni bir istek ile verileri alır ve sunucudaki son durumu getirir. Burada senin istediğin gibi çalışıyor ama diğer türlü cache'den dolayı eski sayfa açılıyor. Bu sitelerin çoğu için geçerli. Çözmek için script kod kullanılabilir ama bence gerek yok ve büyük bir problem değil.
kemal 04 Mayıs Salı 2010 13:30 #10
Problem değil demişsiniz ama kullanıcı kendi profilinden çıkış yaptıktan sonra ctrlc ctrlv deyip tekrardan kendi sayfasının açıldığını görmesi de saçma olur.Bu sırada kullanıcı sınıfını sessiona atıyorum.cıkısta sessionı null yapıyorum.ama o da f5 istiyor.Bir de cogu sitede var demişsiniz ama öyle değil diğer siteler de belirli önlemler alınmış ama ne?mesela yenibiris.com da asp.net ile yapılmış ama kendi profilim için denediğimde bir sorun yok. Bu sırada zaman ayırdğın icin de tesekkur ederim.
kemal 04 Mayıs Salı 2010 15:14 #11
<%@ OutputCache Duration="1" VaryByParam="none" %> sayfaya bu direktifi verince(sayfanın en üstüne yazdım) sorun kalktı yani 1 saniyeliğine cache işlemi yapıyor.Ama mantıklı mı? Yani performans kaybına yol açmaz mı? Sence bu amatörce bir yaklaşım mı oldu?:))
Mehmet Duran 04 Mayıs Salı 2010 23:52 #12
Merhaba. Bu şekilde sorun çözülebilir ama her tarayıcıda aynı sonucu vermiyor diye biliyorum. Bunun için Response.Cache.SetNoStore(); şeklinde bir kullanım yapabilirsin. (Response.Cache altında bulunan diğer metotlar da işine yarayabilir.)
serkan 09 Aralık Perşembe 2010 22:06 #13
tebrik ederim çok güzel bir anlatım tarzınız var.
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Başarısızlıklarınız ile soylu bir şekilde yüzleşin, başarıdan farkı kalmayacaktır.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009