Makale Özeti

ASP.NET 2.0 ile birlikte hayatımıza giren yeni web sunucu kontrolleri ve Visual Studio.NET 2005 in yeni özellikleri ile ilgili detaylı bilgi bulabileceiniz bir makale. Yepyeni web kontrolleri, yenilenen code-behind yapısı, Paga cretion modelindeki yenilikler... vb. makalede bulabileceğiniz başlıca konular.

Makale

ASP.NET 2.0 Web Uygulamalarına Genel Bakış

.NET teknolojilerinin hayatımıza girişi, biz yazılım geliştiriciler için büyük yenilikler ve daha önceden kalma birçok alışkanlığımızı artık geride bırakmamız gerektiği anlamını ortaya çıkardı. ASP diliyle uygulama geliştiriken kullandığımız yine bir Microsoft ürünü olan Visual Interdev geliştirme aracı artık rafa kaldırıldı. Onun yerine çok daha güçlü bir araç olan Visual Studio 2003 uygulama geliştirme ortamını kullanmaya başladık. Bu yeni ortam hayatımızı kolaylaştıran birsürü yenilikle birlikte geliyordu. Code-behind (içerik ile program kodunun birbirinden ayrıştırılması) , just-in-time debugging (anında hata ayıklama), intellisense (akıllı kod algılama) gibi web uygulama geliştirme yapıları işlerimizi oldukça kolaylaştıran yapılar olarak karşımıza çıktı.

Şimdilerde ise yine Microsoft tarafından .NET Framework 2.0 lanse ediliyor. Bununla birlikte en son 1.1 versiyonu bulunan ASP.NET teknolojisi de 2.0 versiyonuna kavuşmuş oluyor. Ayrıca hayatımızı kolaylaştıran Visual Studio 2003 uygulama geliştirme aracımız da artık Visual Studio 2005 versiyonu ile karşımızda. İşte şu an okumakta olduğunuz bu makalenin konusu da tam olarak bu; ASP.NET 2.0 ile birlikte gelen yenilikler  ve yeni yardımcımız Visual Studio 2005 in bize kazandırdığı yeni yetenekler.

Microsoft Visual Studio 2005 Yenilikleri

Visual Studio 2003 deki yapı ile, yeni bir web projesi yaratmak istediğimizde yapılan, önce IIS içerisindeki root klasörümüzde (ki bu genellikle C:\Inetpub\wwwroot olarak kullanılır) sanal bir dizin yaratmak ve web uygulamasını IIS içinde bu sanal dizinde çalıştırmak şeklinde gerçekleşiyordu. Artık Visual Studio 2005 ile birlikte bu zorunluluk ortadan kalkmakta. Artık 2005 içerisinde entegre bir halde web sunucu yazılımı bulunuyor ve bu sayede yazılım geliştirdiğimiz sistemde IIS kurulu olmasına gerek kalmaksızın uygulamalarımızı test edebiliyoruz.

Şekil – 1 ASP.NET Development Server

Bu sayede yukarıdaki şekilde de görüldüğü gibi, artık uygulama geliştirirken IIS içerisindeki sanal dizinlere bağlı olmadan rahatlıkla web projemizi test edebiliyor her türlü debugging işlemini gerçekleştirebiliyoruz.

Bunun dışında ilk gözümüze çarpan diğer bir yenilik ise Open Project menüsüne tıkladığımızda karşımıza çıkıyor.

Şekil - 2 Open Web Site Dialog

Şekil – 2 den de görüğünüz gibi artık web uygulamalarımızı istersek Local IIS sunucumuzdaki sanal dizinlerde, istersek sabit diskimiz üzerindeki proje dosyasından, hatta eğer istersek uzaktaki bir FTP sunucusundan yada HTTP üzerindeki bir siteden açarak geliştirebiliyoruz. 

Şekil – 3 Copy Web Site Ekranı

Ayrıca bir diğer önemli yenilik olarak da Copy Web Site ekranını sayabiliriz.Bu yapının daha önceki versiyon 2003 de de bulunmasına rağmen, artık 2005 de bu çokdaha kullanışlı ve etkili bir hale geldi. Şekil – 3 de görüldüğü gibi web site kopyalama ekranına girdiğimizde karşımıza sol tarafta kendi sistem diskimiz, diğer tarafta ise sitemizin yayınlandığısunucu bilgisayardaki dosyalar bulunuyor. Sunucu bilgisayara bağlanmak için üstte bulunan Connect butonuna tııklıyoruz ve karşımıza Şekil – 2 de bahsedilen Open Web Site ekranı çıkıyor. Buradan da sunucumuza bağlanıp, sekronizasyon işlemini gerçekleştirebiliyor ve yaptığımız değişikliklikleri kolaylıkla web server’ımıza aktarabiliyoruz.

Code – Behind Yapısındaki Yenilikler

ASP.NET 1.1 sürümündeki Single – File Page Model ve Code Behind model adı verilen iki farklı kodlama mdeli ASP.NET 2.0 sürümünde de yine rahatlıkla kullanılabilmekte. Fakat code-behind modeliyle ilgili önemli yenilikler yapılmış durumda. Gelin önce, Single – File Page Modelinin ne olduğunu hatırlayalım ve daha sonrada Code – Behind Modelindeki yenilikleri inceleyelim.

Asp.net ve uygulama kodlarımızı aynı dosya içerisinde yazdığımız yapıya Single – File Page Model adı verilmekte. Bu yapıda uygulama kodları <script runat=”server”>....</server> etiketleri arasına aspx dosyasında inline olarak yazılıyor ve bunların altında da aspx kodlarımız bulunuyor. İlgili örneği aşağıda inceleyebilirsiniz.

<%@ Page Language="VB" %>
<
script runat="server">
    Protected Sub Button1_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs)
        Label1.Text = "Şu anki saat : " & DateTime.Now.ToString()
    End Sub
</script

<html>
<
head id="Head1" runat="server">
  <title>Single-File Page Model</title>
</head>

<body>
  <form id="form1" runat="server">
    <div>
      <asp:Label ID="Label1"
        runat="server" Text="Label">
      </asp:Label>
      <asp:Button ID="Button1"
         runat="server" OnClick="Button1_Click" Text="Button">
      </asp:Button>
    </div>
  </form>
</body>
</
html>

Burada anlatılan yapı ASP.NET 1.1. deki gibi aynen 2.0 versiyonunda da kullanılabiliyor. Fakat bir diğer yapı olan Visual Basic.Net kodları ile aspx kodlarının ayrı ayrı dosyalarda saklandığı yapı olan Code-Behind modelde birtakım değişiklikler bulunuyor. Bu yapıda yine daha önce de olduğu gibi web sayfamızın kodları aspx uzantılı dosyamızda, uygulama kodlarımızda aspx.vb (eğer C# ile geliştiriyorsak aspx.cs) uzantılı dosyamızda bulunuyor.

Yukarıdaki yapıyı ASP.NET 2.0 Code - Behind şekline dönüştürecek olursak karşımıza çıkacak yapı şu şekilde olacaktır.

<%@ Page Language="VB" CodeFile="SamplePage.aspx.vb"
    Inherits="SamplePage" AutoEventWire="false" %>
<html>
<
head id="Head1" 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>

 

Partial Class SamplePage
   Inherits System.Web.UI.Page
    Protected Sub Button1_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
        Label1.Text = "Şu anki saat : " & DateTime.Now.ToString()
    End Sub
End Class
 

 

Daha önceki yapıda code-behind sınıfı, aspx sayfasındaki bütün kontrolleri ve değişkenleri içeren komple bir sınıf tanımı olarak karşımıza çıkıyordu. Fakat bu yeni sürümde code-behind sınıfı, artık sadece bize bu kısımda gerekli olacak değişkenleri ve olay tanımlamalarını içeren bir sınıf olarak kullanılıyor. Code behind sınıfı artık partial class olarak tanımlanıyor ve sayfada direkt olarak gerekmeyen kod tanımlamalarındanve yüklerinden bizleri kurtarıyor. Yukarıdaki örnekte de görüldüğü gibi; aspx tarafında kullanılan Button1 ve Label1 isimli web kontrollerine ait bir tanımlama code-behind tarafında yapılmıyor. Oysaki eski sürümde Protected WithEvents Button1 As System.Web.Controls.Button şeklinde bir tanımlama satırına ihtiyaç duyulacaktı.

İşin alt yapısına baktığımız zaman ASP.NET 2.0 code-behind yapısının partial classes kavramıyla sağlandığını görüyoruz. Artık code-behind sınıfı aspx sayfasında doğrudan türetilmeyerek, partial class şeklinde türetiliyor. Daha sonra derleme esnasında da .NET Framework tarafından aspx tarafı ile code-behind tarafı birleştirilerek derleme işlemi gerçekleştiriliyor. Bu sayede de aspx tarafındaki tanımlamalara gerek kalmadan uygulama build edilebiliyor.

Son olarak ASP.NET 1.1 ve 2.0 sürümlerindeki @Page yönergesine baktığımızda aşağıdaki gibi bir farklılık göze çarpar.

ASP.NET 1.1
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="SamplePage.aspx.vb" Inherits="SampleProject.SamplePage"%>

ASP.NET 2.0
<%@ Page language="VB" CodeFile="SamplePage.aspx.vb"
  Inherits="SamplePage" AutoEventWireup="false" %>

Yenilikleriyle Page Object Model

Daha önceki ASP.NET 1.1 versiyonunda da olduğu gibi aspx web formları Page sınıfından türetilerek oluşturulurlar. 1.1 tarafından desteklenen tüm metodlar ve özellikler 2.0 tarafından da tam anlamıyla desteklenmektedir. Bunlara ek olarak yeni özellikler, yeni event’ler (olay) ve metodlar bu yeni verisyona  eklenerek kullanımımıza sunulmuştur. Şimdi bu yeni eklentileri ne olduğuna kısa değinelim.

@Page Direktifine Eklenen Özellikler

Page Directive, aspx sayfamızın ilk satırını oluştura <@Page Language=”VB” ..... şeklinde başlayan kısımdır.

Nitelik

Açıklama

Async

Sayfaya asenkron eklentiler kullanmaya yarr. Default değeri False’ dur. True olarak set edildiğinde sayfa IHttpHandler sınıfı yerine IhttpAsyncHandler sınıfından türetilir.

CompileWith

Code-behind yapıındaki yeniliklerden biridir. Burada “BaskaBirSayfa.aspx.vb” şeklinde bir sınıf dosyası belirtildiğinde sayfa o sınıfın da base class’ı haline gelir ve ordaki metodlar da kullanılabilir.

EnablePersonalization

Windows kullanıcı hesabıyla etkileşecek webformalrı hazırlanacağı zaman kullanılır. Defaul değeri False’dur.

MasterPageFile

Eğer sayfa bir master sayfanın content sayfasışeklinde çalışacaksa set edilir. (Bu konuya başka bir makalede detaylı olarak değinmeyi düşünüyorum.)

PersonalizationProvider

EnablePersonalization özelliğindeki gibi windows hesabı kullanılacaksa set edilir. Hesaba erişmek için kullanılacak sağlayıcı bilgisini içerir.

Theme

ASP.NET 2.0 ile birlikte gelen en önemli yeniliklerden birisidir. Sayfalarda tema kullanılarak kişiselleştirme yapabilme konusuyla ilgilidir. Kullanılacak temanın adres bilgisini içerir. (Bu konu da ayrı bir makalede ele alınacaktır.)

Page Objesine Ait Yeni Event’ler

ASP.NET sayfaları yaratılırken çeşitli event’ler içindeki kodlar çalıştırılarak sonuç çıktısı oluşturulur. Bu olayların ele alınma sırası yeni eklenen Event’lerle birlikte ASP.NET 2.0 da biraz farklılık göstermektedir. Bir ASP.NET sayfasının hayat döngüsüne birazdan değineceğim. Ama önce yeni eklenne olaylara bir göz atalım.

Olay

Açıklama

InitComplete

Daha önceki versiyonda da bulunan PageInit olayı çalışırıldıktan sonra meydana gelir.

LoadComplete

Sayfanın yüklenmesi tamamlandığı zaman çalıştırılır, yükleme işleminin bittiği alamına gelir.

PreInit

Page Inilization işlemi gerçekleşmeden önce çalışan olaydır.

PreLoad

Sayfa yüklenmesi gerçekleşmeden hmen önce çalışır.

PreRenderComplete

Sayfadaki tüm kontrol ve child kontrollerin yartılma işleminin tamamlandığı anlamına gelir. Bu olaydan sonra, ViewState değerleri atanır ve sayfanın HTML haline dönüştürülme işlemi tamamlanmış olur.

ASP.NET 2.0 Sayfasının Hayat Döngüsü

Şekil – 4 ASP.NET 2.0 Sayfasının Hayat Döngüsü

Yukarıdaki şekilde, ASP.NET sayfasının bir istemci tarafından talep edildiğinde, sunucunun sayfa çıktısını hazırlayıp istemci tarayıcıya gönderinceye kadar yaptığı işlemleri görüyorsunuz. Buradaki isimler ASP.NET sayfası hazırlanırken sırasıyla çağrılıp çalıştırılan Event adlarıdır. Şimdi gelin bu eventler içinde neler olduğuna kısaca bakalım. 

Page_PreInit              Sayfanın PostBack kontrolünün yapılır.
                                  Dinamik web kontrolleri yaratılır.
                                  Sayfa bir content page ise master sayfa set edilir.

Page_Init                   Kontrol özellikleri okunur ve ilk değerleri atanır.

Page_Load                 KKontrol özellikleri okunur ve değişiklikler varsa güncellemeler yapılır.

Control Events           Sayfadaki kontrollerle ilgili olaylar çağrılarak yorumlanır.
                                  Eğer validation konrolleri varsa, bilgi denetleme işlemleri yapılır.          
                                  Button kontrolünün Click olayı gibi varsa belirtilen kontrol olayları yakalanarak çalıştırlır.

Page_PreRender        Sayfa içeriği ile ilgili son değişiklik ve düzenlemeler bu kısımda yapılır.

Page_Unload              Sayfa ile ilgili çeşitli sonlandırma işlemleri yapılır.
                                  Açık dosya ya da veritabanı bağlantısı varsa kapatılır.
                                  Logging vb. gibi talep bağlantılı işlemler varsa bunlar sonlandırılır.

ASP.NET 2.0 Sunucu Kontrollerine Genel Bakış

ASP.NET 1.1 versiyonu tarafından kullanılabilen tüm sunucu kontrolleri 2.0 tarafından da tamamıyla, hatasız bir şekilde kullanılabilir. Eski versiyondaki kontrollere ek olarak yeni özellikler eklenmiş ve sisteme de ayrıca yepyeni sunucu kontrolleri ilave edilmiştir. Veritabanından veri alan ve bunları görüntülemeye yarayan kontroller (DataList ve yeni eklenen kotrol GridVew gibi) daha çok ADO.NET 2.0 ile ilgili olduğundan bu tip kotrollere bu makalede değinmeyeceğim.

Daha çok bilgi görüntüleme gibi işlemler için ASP.NET web formlarınızda sıklıkla kullanacağınızı düşündüğüm yeni birtakım sunucu kontrolleri ile ilgili bilgileri aşağıda bulabilirsiniz.

Panel Kontrolü 

Panel kotrolü daha önce 1.1 versiyonunda bulunan fakat 2.0 da yetenekleri daha fazla artırılan bir sunucu kontorlüdür. HTML deki <DIV> etiketiyle aynı işi yapar. 2.0 versiyonunda bu kontrole ScrollBars özelliği eklenmiş ve DIV etiketindeki overflow özelliği bu kontrole eklenmiştir.

<asp:Panel ID="Panel1" runat="server" Height="105px" Width="265px"             ScrollBars=Vertical style="border:solid 1px;">
            0<br /> 1<br /> 2<br /> 3<br />       
            4<br /> 5<br /> 6<br />       
 </asp:Panel>


Şekil – 5 ASP.NET 2.0 Panel Kontrolü

Wizard Kontrolü

Windows uygulamalarında sıklıkla gördüğümüz uygulama sihirbazı görüntülerinin web formlarında da kullanılabilmesi amacıyla ASP.NET 2.0 içerisine eklenmiş bir konroldür. Bilgisayarımıza program kurarken karışımıza çıkan ve next – next diyerek ilerlediğimiz ekran yapısıdır Wizard’lar. İşte bunun web de nasıl kolaylıkla uygulanabileceğine ilişkin örnek de aşağıda.

<asp:wizard runat="server" id="BookWizard"
        style
="border:solid 1px" width="300" height="100"
        onfinishbuttonclick="Finished" CancelButtonText="İptal Et"
        FinishCompleteButtonText="Tamamla" FinishPreviousButtonText="Geri"         StartNextButtonText="İleri" StepNextButtonText="İleri"               StepPreviousButtonText="Geri">
    <WizardSteps>
          <
asp:WizardStep steptype="Start" runat="server">
           
Ürünle ilgilendiğinizi için teşekkür ederiz.<br />
            Ödemeyi yapabilmek için lütfen devam ediniz.
        </asp:WizardStep>
        <asp:WizardStep steptype="Step" runat="server">
            Kredi Kartı numaranızı giriniz :
            <asp:textbox runat="server" id="CreditCard" />
        </asp:WizardStep>
        <asp:WizardStep steptype="Finish" runat="server">
            Kredi kartı numaranız doğrulandı. İşlemi tamamlamak için
tıklayınız.
        </asp:WizardStep>
        <asp:WizardStep steptype="Complete" runat="server">
            Ödeme işlemi başarıyla sona ermiştir.<br />Teşekkür ederiz.
        </asp:WizardStep>
    </WizardSteps>
    </asp:wizard>

Şekil – 6 Wizard Kontrolü

Dosya Yükleme (File Upload) Kontrolü

ASP.NET 1.1 sürümünde dosya gönderim işlemi standart HTML kontrollerinden olan <input type=file> etiketi ile gerçekleştirilebiliyordu. ASP.NET 2.0 versiyonunda ise bu işlemi yapabilmek için <asp:fileupload> kontrolü kullanımımıza sunuldu. Bu kotrol sayesinde kullanıcının kendi bilgisayarından bir dosya seçerek bunu sunucu makinada istenen yere kaydetmesi sağlanabiliyor. Bu kotrole ait çeşitli metdolarla da gönderilen dosyanın adı, uzantısı, kaydedilen yol gibi parametrelere de artık kolaylıkla erişebiliyoruz. Ekran görüntüsü ve kullanımı aşağıda inceleyebilirsiniz.

<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="btnUpload" runat="server" Text="Gönder" />
<br />
<asp:Label ID="lblDurum" runat="server"></asp:Label></div>
 
Protected
Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpload.Click
        If FileUpload1.HasFile Then
            Dim dosyaAdi, dosyaYolu As String
 
            dosyaAdi = FileUpload1.FileName
            dosyaYolu = Server.MapPath("") + FileUpload1.FileName 

            FileUpload1.SaveAs(dosyaYolu)
            lblDurum.Text = "Dosya başarıyla <b>" + dosyaYolu + "</b> adresine gönderildi."
        Else
            lblDurum.Text = "GÖndermek için herhangi bir dosya seçmediniz!"
        End If
    End Sub

 

Şekil – 7 File Upload Kontrolü

Sonuç

Şu ana kadar makaleden de incelemiş olduğunuz gibi ASP.NET 2.0 ve Visual Studio.NET 2005 hayatımızı biraz daha kolaylaştıran çokca yeilik içermekte. Herbiri detaylıca incelenmesi gereken konular olan, master-content pages, yeni web kontrolleri, web formlarında web part ve tema kullanımı, geliştirilen ADO.NET 2.0 yapısı ASP.NET 2.0 ile birlikte gözümüze ilk çarpan yenilikler şeklinde sayılabilir. Visual Studio 2005 in gelişmiş intellisense yapısı, yenilenen code-behind sistemi ve işin tasarım kısmındaki tamamen yenilenerek güçlendirilen WYSIWYG HTML editör yapısı, bu aracın en önemli yenilikleri şeklinde karşımıza çıkıyor.

Makale de bu gibi yeniliklere mümkün olduğunca detaylı değinmeye çalıştım. Her türlü soru ve öneriniz için bana mail adresimden ulaşabilirsiniz.

Yarını yakalamak dileğiyle...

Kaan TEZGEL
kaan@kaantezgel.com