Makale Özeti

ASP.NET 2.0'da değişen Sayfa Yapısı ve yeni dil (VB.NET,C#) özelliği Partial Class’lar

Makale

ASP.NET 2.0 Temelleri

 

ASP.NET 2.0 Sayfa Yapısı ve Partial Class’lar

 

ASP.NET 1.0/1.1 webformlar tasarlamak için iki yöntemi destekler. Birincisi tek dosyada kod yazabilmeyi sağlayan in-line yöntemi, yani <script runat=”server”></script> etiketleri arasında kod yazılan yöntemdir. Bu yöntem ASP.NET 2.0’da desteklenmeye devam ediyor. Yenilik olarak artık Visual Studio 2005’de bu sayfa modeli üzerinde IntelliSense destekli uygulama geliştirebilmemizi sağlıyor.

 

Inline yöntem ile Visual Studio 2005 ile uygulama geliştirmek.

 

<%@ Page Language="VB" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

 

<script runat="server">

 

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

        Label1.Text = "Visual Studio 2005 artık In-Line sayfa yapısını destekliyor. Hem de IntelliSense ile!!"

    End Sub

</script>

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title>Untitled Page</title>

</head>

<body>

    <form id="form1" runat="server">

        <div>

            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /></div>

        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

    </form>

</body>

</html>

 


In-Line yöntem ASP.NET 1.0/1.1 versiyonunda da desteklenen bir özellikti ancak Visual Studio.NET 2003 tarafından bu özellik desteklenmemekteydi. Bu yöntem ile uygulama geliştirmek için kullanılan editör ya notepad gibi basit bir editör yada ücretsiz dağıtılan WebMatrix editörü idi.

 

WebMatrix ASP.NET takımının Visual Studio ve ASP.NET’in yeni versiyonuna dahil etmeyi planladığı bir çok özelliği denediği bir proje idi.

 

Bu resmi olarak bu şekilde açıklanmasa da Microsoft ASP.NET takımı bu ücretsiz editörde sundukları bazı özellikler ile uygulama geliştiricilerin özelliklere karşı nabzını yoklayıp beğenilen özellikleri ASP.NET 2.0 ve Visual Studio 2005’de bizlere daha sağlam ve işlevsel olarak uygulanabilir halde sundu.

 

 

Diğer yöntem ise CodeBehind yöntemdir. Bu yöntem ile Visual Basic.NET, C# yada baska bir programlama dili ile yazılmış olan program kodu ayrı bir dosyada, html ve asp.net sunucu kontrollerini tanımlayan etiketlerin ayrı bir dosyada saklanması mantığına dayalıdır. ASP.NET 2.0 ile beraber nu model üzerinde önemli değişikler yapılmış ve daha sağlam ve çalışması daha kolay bir yapıya kavuşmuştur.

 

CodeBehind Modelinde Değişiklikler

 

ASP.NET 1.0/1.1 ile codebehind dosyası Page sınıfından miras alan bir class olarak tasarlanır. .aspx sayfasındaki etiketler ise çalışma anında ayrıştırılıp bir class’a çevrilip, codehind class’ından miras (inheritance) alırdı. Bu işlemi gerçekleştirmek için Visual Studio .NET ile uygulama geliştirirken ekstra bir işlem yapmaya gerek yoktur. .aspx sayfasında @Page etiketi kullanılarak aşağıdaki

 

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="CengizHanDotComV1.WebForm1"%>

 

Public Class WebForm1

    Inherits System.Web.UI.Page

..

..

End Class

 

ASP.NET 2.0 ile beraber CodeBehind modeli .NET 2.0 ile beraber gelen Partial Class’ların avantajlarından faydalanmaktadır.

 

Partial Class

 

ASP.NET 2.0’da Codebehind modelinin Partial Class’ları kullanımı ve getirdiği avantajlara bakmadan önce Partial Class’ların çalışma mantığını ve ne olduklarını inceleyelim.

 

Bir class (sınıf) ‘ın birden çok dosyadan oluşabilmesi mantığına dayalıdır.

 

Şu ana kadar tek dosyada bir class oluşturabilyorduk bu yöntemin tek farkı ise classların istediğimiz bölümlerini ayrı dosyalar yazabiliyoruz.

 

Aşağıdaki resimde WorldSaver adında bir class oluşturulmuş ve iki ayrı dosyaya dağıtılmıştır.

 

Partial class oluştururken classların ayrı dosyalarda bölümler içerebileceğini belirlemek için Partial ifadesi kullanılır. Partial ifadesi classın parçası olan tanımlamaların sadece birisinde kullanılmayabilir. Yani 3 tanımlamadan (dosya) oluşan bir class’da ikisinde Partial ifadesi yer alması zorunludur. Partial ifadesinin yazılmadığı diğer class’ın ise partial çalıştığı anlaşılır. Ancak iki class’da partial ifadesi yazılmadan tanımlama yapılırsa tasarım anında Visual Studio bizi hata ile ilgili uyarır.

 

 

 

 

 

'WorldSaver.vb

Partial Public Class WorldSaver

    Public Sub SaveWorld()

        Me.ForceBackTheET()

        Me.MakeWorldBetter()

    End Sub

    Private Sub ForceBackTheET()

        'E.T'yi kov

    End Sub

    Private Sub PlantFlowers()

        'çiçekler dik

    End Sub

End Class

 

 

 

'WorldSaverPart2.vb

Partial Public Class WorldSaver

    Private Sub CleanTheStreets()

        'sokakları temizle

    End Sub

    Private Sub MakeWorldBetter()

        Me.PlantFlowers()

        Me.CleanTheStreets()

    End Sub

End Class

 

 

 

Partial class’lar inheritance ve interface implementasyonu gibi deklarasyonların (inherits ve implements) tüm partial class parçaları altında veya sadece bir tanesinde yapılmasına olanak tanır.

 

ASP.NET 2.0’da CodeBehind Modeli

Partial Class’lar sayesinden codebehidn dosyası tek başına bir class tanımlaması değildir. .aspx dosyasındaki etiketlerin çalışma zamanında compile (Eğer istenirse önceden compile edilebilirler.) edilmesi ile oluşan class ile birleşir ve tek bir class olarak çalışır.

 

Bu sayede CodeBehind dosyası artık sadece gerekli uygulama kodunu ve event handler’ları içerir. .aspx’de yer alan bir kontrol için codebehind dosyasında bir tanımlama yapmaya gerek yoktur.

 

ASP.NET 2.0’da CodeBehind tanımlaması:

 

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default6.aspx.vb" Inherits="Default6" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Untitled Page</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <asp:Button ID="Button1" runat="server" Text="Button" /></div>

    </form>

</body>

</html>

 

 

'Default6.aspx.vb

Partial Class Default6

    Inherits System.Web.UI.Page

    Protected Sub Button1_Click(ByVal sender As Object, _

    ByVal e As System.EventArgs) Handles Button1.Click

 

    End Sub

End Class

 

ASP.NET 2.0’da, ASP.NET 1.0/1.1 de olduğu gibi CodeBehind dosyasında (örneğimizde Default6.aspx.vb), .aspx sayfasında ASP.NET sunucu kontrolü etiketleri ile tanımlanan Button1 adında ki Button kontrolü için ekstra bir tanımlama yapmaya gerek yoktur.

 

Eski CodeBehind Modeli

Yeni CodeBehind Modeli

 

İki dosya arasındaki ilişkilendirme için kullanılan yöntem (@Page tanımlaması) birbirine benzesede yeni CodeBehind modeli CodeBehind (veya Src) özellikleri yerine CodeFile özelliğini kullanmaktadır.

 

Yeni CodeBehind modeli bize şu kolaylıkları getirmektedir. Yeni CodeBehind modeli ile codebehind dosyasında artık sadece gerekli olan kodlar yazılacak, designer tarafından eklenen etiket tanımlamaları artık codebehind dosyasında yer almayacak.

 

Buna bağlı olarak kullanıcı kontrollerini(.ascx dosyaları) .aspx dosyamıza eklediğimizde kullanıcı kontrolü ile aynı ID’ye sahip bir değişken tanımlamasını codebehind dosyasına yazmak zorunda kalmayacağız. Visual Studio.NET 2003’de bunu programcılar CodeBehind dosyasına manuel eklemek zorunda kalıyordu.

 

 

Cengiz HAN

Microsoft ASP.NET MVP

cengiz@cengizhan.com