ASP.NET ile birlikte gelen Web kontrolleri uygulama geliştiricisinin (application developer) önüne çok büyük imkanlar seriyor. Web Formları olarak da adlandırılan bu teknoloji sayesinde form tasarlamak yerini form programlamak ya da geliştirmek kavramına bırakıyor. Programcı kontrolleri istediği şekilde dizayn edip sayfaya yerleştirebiliyor, ve kontrollerin stillerini dinamik olarak değiştirebiliyor.

"Web Kontrolleri ve "Olay"lar" devam ediyor »

24.05.2002 | Sacid Muharrem Ünal | 0 yorum

ASP ile ASP.NET arasında ne gibi farklar olduğu uzun süredir forumlarda yer alıyor. Yetersiz cevaplar nedeniyle de insanlar farkın dosya uzantısındaki "x" harfi olduğunu düşünebiliyor. Bazen ASP.NET ile PHP karşılaştırılıyor ve hangisi daha iyi anketleri düzenleniyor. Oysa bu üç web uygulama arayüzünün kategorileri farklı ve birbirleri ile kıyaslanmamaları gerekiyor. Klasik ASP ile PHP yi karşılaştırmak ne kadar akıllıca olsa da bunlardan birisinin ASP.NET ile karşılaştırılması çok zor ve mantıksız olur. Çünkü ASP.NET in çok farklı bir motoru ve çalışma ortamı var. ASP ve PHP kodları basit anlamda server ''da yorumlanıp html kodlarına dönüştürülüyor ve client ''e yollanıyordu. Gelen koddaki html kodlarını yorumlayan (interpret) tarayıcı sayfayı kodlayanın demek istediğini iletiyordu client ''a..

ASP.NET sayfaları ise ciddi anlamda inşa ediliyorlar (build). Bir ASP.NET sayfasın client tarafından talep edildiğinde (request) server''ın nasıl tepki (response) verdiğini kısaca özetlemeyi yeğliyorum. Şekilin de anlattıklarıma faydası olacaktır.

Client tarafından gelen talebi değerlendiren server gerekli dosyayı bulur. Dosyanın uzantısı ".aspx" ise işlenmek üzere (processing) ASP.NET moturuna gönderilir. Bu dosyaya gelen ilk talep ise veya dosyanın içeriği/kodu değiştirilmiş ise kod uygun dilin derleyicisi tarafından CLR (Common Language Runtime) ile yürütülmek üzere MSIL (Microsoft Intermediate Language) ''e çevrilir. Derlenmiş kod çalıştırılır. Sonuçta ortaya çıkan HTML kodu client ''e gönderilir.

Merhaba Dünya, Ama Nasıl?

Makalelerimde basit kod örnekleri verip ASP.NET ''in yeteneğini göstermeye çalışacağım. Bu amaçla da ilk olarak herkese tanıdık geleceğini düşündüğüm bir örneğe başvuracağım. Biliyorsunuz programlama dilleri hakkında hazırlanmış kitaplar ve tutorial/öğretici ''lerin dil hakkındaki ilk örnekleri çoğunlukla "hello,world" olur. Bu örnek uygulanarak programlamaya giriş yapılır. "Hello, world" uygulaması ne kadar basit olsa da dil hakkında çok şey söyler. İki elin parmaklarıyla sayılabilecek sayıda kod satırı içeren bu uygulama, ayrıntıya girmeden kısaca maddelediğim şu fikirleri edinmemizi sağlar.

Örneğin, C ile yazılmış bir "hello, world" kodundan şunları anlarız.
1. C dilinde programlar main() isimli fonksiyonun içeriğini yerine getirerek başlarlar.
2. printf() fonksiyonunu kullanmak için stdio.h dosyası include edilir.
3. Ekrana çıktı printf() fonksiyonu ile alınır.
4. Fonksiyon ve döngülerin başlangıç ve sonlarını { ve } ler belirtir.

Neden C ''de "hello, world" örneğinin yararlarından bahsediyorum ? Amacım C öğretmekmi, tabii ki hayır. Yazıya şöyle devam edelim. Bu örneği vermekteki amacım ASP.NET hakkında içine düşülen bir yanılgıyı işaret etmekti. "Hello, world" örneğinin icat edilme amacının "erkana birşeyler yazmak" değil örneği inceleyen kişinin (öğrenmek isteyen kişi oluyor) "demek ki bu iş böyle oluyormuş" demesi olduğunu göstermekti. Son zamanlarda deminden beri defalarca kez tekrar ettiğim iki kelimenin ekrana yazılmasıyla ilgilenen kodun ASP.NET versiyonlarını görüyorum ve bildiğini düşünenler bilmediğini düşünenlere bu kodu göstererek "işte ASP.NET böyle birşey" diyorlar. Fakat bu kodların klasik ASP ''den farklı bir yeri olmuyor. Belki de tek fark dosya uzantısının ".aspx" olması oluyor. Bahsettiğim kod en basit haliyle şu:



<%
response.write("hello,world")
%>


Acaba bu örnek bize gerçekende ASP.NET in nemenem birşey olduğunu gösterir mi ? Bu koddan response.write ifadesinin ASP.NET sayfalarında da kullanılabileceği sonucu çıkarabilecek olsak bile ASP.NET ''in nasıl birşey olduğu konusunda en küçük bir fikir alamıyoruz. Ekrana çıktı almak için kullandığımız kod klasik ASP ''nin en çok kullanılan deyimlerinden birisi ve, ASP açılış/kapanış tag lerimiz aynı ve diğer 4 satır HTML kodlarından oluşuyor. Bu koda ve title tag inde yazana saygı gösterirsek, ASP ile ASP.NET arasında fark olmadığını düşünebiliriz.

Peki gerçekten ASP.NET örneği diyebileceğimiz şekilde yazamazmıyız bu basit kodu. Yazalım ama kodun ilk bakışta ASP ''den farklı olduğunu gösterecek birşeyler ekleyelimki sayfamızın başlığı "İlk ASP.NET kodum" olabilsin.

<html><head><title>İlk ASP.NET kodum<body>
<asp:Label id="etiket" runat="server"/>
<script language="VB" runat="server">
Sub Page_Load(Source As Object, E As EventArgs)
  etiket.Text = "hello, world"
End Sub

İşte ASP.NET ''te dünyaya selam vermenin prosedürü bu.. Yazdığım 10 satır kodu satır satır incelemeyi öneriyorum. Sadece açıklamam gereken satırları yazacağım.
3. satır : asp:Label bir web kontrolüdür ve sayfaya çıktı almak için kullanılır. Bu kontrolün genel kullanım amacı sayfaya statik değil dinamik çıktı vermektir. Bir düğmenin tıklanmasıyla değişen çıktı misali.. Dolayısıyla yazdığım koddaki label kontrolü kullanımı etik değildir :) Bu arada id attribute ''ünü kullanarak label kontrolümüze nasıl hitap edeceğimizi ve kontrolün server ''da çalışacağını belirttiğimizi gözden kaçırmayın. Server''da çalışma konusuna ileride değinebiliriz.
6 ve 10. satırlar : Bu satırlardaki html kodları tanıdık geliyor. İki fark var; scriptimizin dili Visual Basic (visual basic script değil), ve server ''da çalıştırılacak.
7 ve 9. satırlar : Page_Load olayı adından da anlaşılacağı üzere sayfanın yüklenmesiyle birlikte tetiklenen olaydır ve içine yazılacak kodlar sayfa yüklenirken yerine getirilir. Visual Basic kullanmış olanlar kodu tanır gibi olmakla beraber Page_Load olayını tanımışlardır ve selamlaşmışlardır. Sıklıkla başvurabileceğimiz diğer olaylara da ilerde kısaca bakabiliriz.
8. satır : etiket ismini verdiğimiz Label kontrolümüzün Text özelliğine atama yapıyoruz. Basit bir değer atama olayı..

Bu kodda size klasik ASP ''den farklı olan şeyleri yazmaya ve kısaca açıklamaya çalıştım. Sayfaya ASP.NET ''e özgü bir kontrol koyduk ve sayfanın Page_Load olayında bu kontrolün Text özelliğine değer atadık.

Örneği çalıştırdıktan sonra sayfanın kaynak koduna bakmanızı ve server ''da çalışan label kontrolünün neye dönüştüğünü ibretle izlemenizi istiyorum. Bu şekilde web kontrollerinde neden runat="server" ibaresi kullandığımız daha iyi anlaşılabilir.

Kullanacağınız web kontrolüne runat="server" ifadesini eklemezseniz yapacağınız işlemlere göre sorunlarla karşılaşmanız muhtemeldir. Server''da çalıştırılacağı belirtilmeyen bir web kontolüne olaylar vasıtasıyla erişilemez. Erişilmek istenirse kontrolün deklare edilmediği şekilde bir hatayla karşılaşılır. Başka durumlarda da benzer hatalarla yüzleşme ihtimali vardır ama ben ilk makalemde ayrıntıya girmemek için konuyu açmıyorum ve bu paragrafı bir "ipucu" şeklinde bırakıyorum.


Web Kontrolleri ?

Örneğimizin browser görünümü


Web kontrolleri Microsoft tarafından geliştirilmiş kullanışlı özellikleri olan yeni nesil kontrollerdir. Web kontrollerine asp:kontrol_ismi şeklinde ulaşılır (örnek: ). HTML de karşılığı bulunan web kontrollerinin dışında özel amaçlı web kontrolleri de vardır. "Calendar" ve "DataGrid" bunlara en iyi örnekler olabilir. ASP.NET motoru server ''da çalıştırılan bu web kontrollerini client ''e HTML koduna tercüme ettikten sonra gönderir. Örneğin bir "Calendar" kontrolü server''da çalıştırıldığında html koduna birçok , ve
Örneğe kısaca göz atalım. Web kontrollerimizi içine yerleştirmek üzere runat attribute ''ü server olan bir form tag''i açıyoruz. İçerisine isimlerinin ne olacağını söylediğim iki ListBox ve iki Button kontrolü yerleştiriyoruz. Web kontrollerimizin runat="server" attributelerinin olduğuna ve tag bitiminde / işareti koyduğumuza dikkat çekmek istiyorum. ListBox kontrolünü Select tag''ine benzetebileceğizi söylemiştim. Select tag ''inin açılış ve kapanış taglerinin olduğunu biliyorsunuz. Ama örnekte kullandığım ListBox kontrollerinin sonlarında / karakteri var ve kapanış tag''leri yok. Çok önemli bir ayrıntı olmasada bu konuya ilerki makalelerden birisinde bu kontrol hakkında bilgi verirken değineceğim.

Dili VB olan script tag ''imizi açıyoruz. Page_Load olayıyla ilgili kodlarıda yazıp içerisine giriyoruz. Page.IsPostBack özelliğini açıklamam gerekiyor. Bu ifade sayfanın tekrar yüklenip yüklenmediğini anlamamıza yarıyor. "If Not Page.IsPostBack Then" ifadesinin türkçesi "eğer sayfa tekrar yüklenmiyorsa" oluyor. Şartımız sağlanıyorsa lbSol isimi kontrolün Items özelliğinin Add yöntemiyle kontrole yeni seçenekler ekliyoruz. Page_load olayımız bu "If" kontrolü ile bitiyor.

Ekle butonunun OnClick attribute ''ü ile tetiklediğimiz "ekle" sub rutininde ise; ilk olarak lbSol ''da seçili seçeneği saklamak için kullanacağımız lbSolText isimli string türünde bir değişken deklare ediyoruz. Bu değişkenimize lbSol kontrolümüzün "seçili seçeneğinin" "Text" özelliğindeki değeri atıyoruz. Değişkenimizin değeri boşluk değilse şeklindeki bir If kontrolü ile, lbSag kontrolünün Items özelliğinin Add yöntemiyle değişkenimizin değerini yeni bir seçenek olarak ekliyoruz. lbSol kontrolünden de aynı şekilde ama bu sefer Remove yöntemi ile değişkenimizin değerine sahip seçeneği çıkartıyoruz.

Cikart isimli buton yukarıda anlattığım aynı mantıkla çalışıyor. 2. listeden seçtiğimiz elemanı ordan çıkartıp 1. listeye ekliyor. Klasik ASP bilenlere yabancı gelebilecek kodları açıkladım. Garipsenebilecek satırların ListBoxlara seçenek ekleme ve çıkartma işlemlerinde kullanılan kodlar olduğunu düşünüyorum. İlerideki makalelerde verecebileceğim örnek kodlarla sık kullanılacak diğer yöntemleri de göstermeye çalışacağım. İlk bakışta yabancı görünen kodlar ilerde sizinde can ciğer arkadaşınız olacaktır.

Sonuç Olarak

ASP.NET, "yapabilirliğimizi" artıran yeni bir web uygulama arayüzü olarak web programcıların önüne yeni bir yol açıyor. Web kontrolleri, server taraflı HTML kontrolleri, geçerlilik kontrolleri ve kendi isteğimize göre kullanabileceğimiz özel kontrollerle programcının önünde yepyeni bir araç takımı var artık. İçerisinde kullanışlı özelliklerle donatılmış alet edevat bulunuyor. Artık yukarıda örneğini verdiğim basit uygulamalar türü kodlar için başka ortamlarda dolanmaya gerek yok. Dinamik bir sayfa yaparken HTML, JavaScript, ASP ve muhtelif başka teknolojileri kullanmaya gerek yok. ASP.NET klasik bir şekilde ifade edersek, tüm bunları sahip olduğu geniş araç yelpazesinde barındırıyor.
etiketi eklenir. En çok kullanımına gerek duyulabilecek kontrollerden birisi "ListBox" kontrolü olabilir. ListBox kontrolünün HTML karşılığını SELECT etiketi olarak düşünebiliriz. Kullanım şekilleri ve amaçları hemen hemen aynı olduğu için bu benzetmeyi yapmamız yanlış olmaz. Kontrolün içerisinde seçenekler listelenir. Kullanıcı bu seçeneklerden programcının belirleyeceği şekilde bir veya birden fazlasını seçer ve yine programcının belirlediği süreç içerisinde bu seçimler işlemden geçirilir.

Bu mantıkla yazmış olduğum genel anlamda Web Kontrolleri ve lokal anlamda ListBox hakkındaki örneği makaleme eklemeyi uygun gördüm. Daha önceden ASP.NET hakkında veya web kontrolleri hakkında birşeyler biliyorsanız anlatacağım örneği önce kendiniz yapmayı deneyip bilginizi sınayabilirsiniz. Ama kendinizi yeterli hissetmiyorsanız hiç dikkatinizi dağıtmadan makaleyi okumaya devam etmenizi öneriyorum. Aksi bir durumda içinden çıkamazsanız ASP.NET e karşı antisempati oluşturabilirsiniz. Ki bu durumu hiç istemem :)

Örneğimizde iki adet ListBox ve iki adet Button kontrolü kullanacağız. ListBox kontrollerimize kullanım kolaylığı için kısa isimler vereceğiz. "lbSol" isimli kontrolümüz içerisinde birkaç seçenek tutacak. "lbSag" isimli kontrolümüz ise başta boş olacak, onu biz dolduracağız. Button kontrollerimizden birisinin ismi "btnEkle" diğerinin ismi "btnCikart" olacak. lbSol ''dan seçim yapıp ekle butonuna bastığımızda seçtiğimiz "item" lbSol ''dan çıkartılıp lbSag ''a eklenecek. Çıkart butonumuz ise tersi yönde çalışacak.

  ornek1.aspx
<html><head><title>ASP.NET ile dinamik listeler<body>
<form action="ornek1.aspx" runat="server">
<asp:ListBox id="lbSol" rows="6"  cols="5" runat="server"/>
<asp:Button id="btnCikart" Text="<<<" onclick="cikart"
  runat="server" title="çıkart"/>  
<asp:Button id="btnEkle" Text=">>>" onclick="ekle"
  runat="server" title="ekle"/>
<asp:ListBox id="lbSag" rows="6" cols="5" runat="server"/>
<SCRIPT Language="VB" RUNAT="Server">
Sub Page_Load(Source As Object, E As EventArgs)
  If Not Page.IsPostBack Then
    With lbSol.Items
      .Add("istanbul")
      .Add("kocaeli")
      .Add("ankara")
      .Add("konya")
      .Add("bursa")
      .Add("trabzon")
    End With
  End If
End Sub

Sub ekle(Sender as Object, E As EventArgs)
  if lbSol.SelectedIndex = -1 then
    exit sub
  end if
  Dim lbSolText As String
  lbSolText = lbSol.SelectedItem.Text
  If Not lbSolText = "" Then
    lbSag.Items.Add(lbSolText)
    lbSol.Items.Remove(lbSolText)
  End If
End Sub

Sub cikart(Sender As Object, E As EventArgs)
  if lbSag.SelectedIndex = -1 then
    exit sub
  end if
  Dim lbSagText As String
  lbSagText = lbSag.SelectedItem.Text
  If Not lbSagText = "" Then
    lbSol.Items.Add(lbSagText)
    lbSag.Items.Remove(lbSagText)
  End If
End Sub
14.05.2002 | Sacid Muharrem Ünal | 1 yorum

Fazla olmadı değil mi ASP'ye başlayalı. Sanki daha dün gibi. Statik HTML içeriğini canlandırmaya yepyeni bir yaklaşım getirmişti ASP. ASP, Web sayfalarımızı, CGI'ın performans darboğazına düşürmeden, HTML literalleri arasına yazdığımız (in-line coding) sunucu taraflı script kodlarıyla, tepki veren, veritabanıyla ilişki kurup dinamik içerik üretebilen canlı bir mekanizma sundu bizlere. ASP, zamanın devrimiydi. İyi bir fikirdi. Ama zaman da akıp gidiyordu.

Sahiden ASP'nin kaç versiyonu çıktı? 

"ASP'den ASP.NET'e Doğru" devam ediyor »

08.04.2002 | Muhammed Tahiroğlu | 0 yorum