![]() | |
ASP .Net ve Webformsa Giriş | 20.07.2001 |
| Kategori : ASP.NET Özet : ASP .Net ve Webformsa Giriş | |
|
ASP.NET VE WEBFORMS’A GİRİŞ Asp ile çalışan, ve belli bir seviyeye gelmiş bir programcı olduğunuzu
düşünelim. Asp ile sunucu taraflı yazılım geliştiren pek çok geliştirici aynı
şeyleri tekrar tekrar yapmak zorunda kalır. Diğer geliştirme ortamlarına göre ASP’nin
bazı yönleri gerçekten verimsizdir. İlk olarak ASP size tutarlı ve güçlü bir
programlama modeli sunmaz. Her ne kadar ActiveX , COM gibi teknolojiler size
sadece ASP ile yapamadığınız şeyleri yapma imkanı sağlasa da, genel olarak ASP
diğer geliştirme ortamları ile karşılaştırıldığında işinizi kolaylaştıran ve
verimli çalışmanızı sağlayan bir yazılım
geliştirme ortamı sayılmaz. İşimizi
nasıl kolaylaştıracak derseniz, örnek olarak
olarak Visual Basic kolayca kullanılan, ve oldukça güçlü bir programlama
modeli olan “event driven code” yazma olanağını sağlar. Daha önce Visual Basic
ile tanışmamış olanlar için kısaca
açıklarsak; VB ile bir form tasarlar, bir kaç tıklama ile butonları,
metin alanlarını, onay kutucuklarını bu forma yerleştirir, ve sonra bu
elemanlara denk gelen olaylar için kod yazarsınız. Mesela bir butona tıklanınca
otomatik olarak bu olay için sizin önceden yazdığınız kod çağrılır. Yani
tasarladığınız form, kullanıcılar tarafından kullanıldıkça meydana gelen tüm olaylar için ( mouse’un sağ
tuşuna basılması, klavyeden bir tuşa basılması, programın kapatılması…) önceden
sizin belirleyeceğiniz işlemler gerçekleştirilir. VB pencerelerin açılması,
mouse hareketlerinin izlenmesi gibi işletim sistemi ile alt seviyede haşır
neşir olmanızı gerektiren ve her programınızda mutlaka kullanacağınız işlemleri
otomatik olarak halleder. ASP ile yazılım geliştirirken bu tür bir programlama modelinin eksikliği
sizi bir hayli zorlar. Her zaman yapmak zorunda olduğunuz işleri bir düşünelim.
Temel bir örnek olarak, bir web sayfası için bilgi girişi amacıyla bir form
hazırladığımızı varsayalım. Hemen her ASP programcısının bir web uygulamasında
bir form tasarlaması, bu forma girilen bazı bilgileri kontrol etmesi, ve
formdaki bilgileri mail ile göndermesi gerekmiştir. Peki, kullanıcılar forma eksik bilgi girdiğinde ne olacak ? Programcı
olarak bunu yakalamak da sizin görevinizdir.Oturup her zorunlu bilgi için
kontrol kodunu yazmanız gerekir . Her zorunlu alan, sizin için yeni bir angarya
demektir. Oturup homurdana homurdana kullanıcıların belli alanları (mesela
telefon numarasını )boş bırakmadan formu gönderememesi için gerekli kodu
yazarsınız. Üstelik bu standart işleri yapmanın standart bir yolu da yoktur! Form
örneğimizi düşünürsek, form bilgilerini adım adım sayfadan sayfaya taşımak
sizin işinizdir. Session seviyesinde değişkenler kullanabilirsiniz, ya da
formun içinde tanımlayacağınız hidden alanlar veya veritabanı yardımıyla bilgileri taşıyabilirsiniz . Bu
gibi detaylarla her seferinde uğraşmak verimlilik açısından büyük bir kayıptır. Yazdığınız kodun hata
oranı yüksektir, ve sizden başka
programcılar kodunuz üzerinde çalıştığında, sizin zekice çözümleriniz kodunuzu anlamaya çalışan o zavallıların
sinir krizi geçirmesine neden olabilir . Çok mu iç karartıcı oldu ? Belki, ama iyi
haberlerim olmasa bu kadar karamsar yorumlar yapmazdım :) ASP.NET’in
size sunduğu programlama modelleri ile yukarıda saydığım, ve sayacak
yerimizin olmadığı bir sürü sorun artık tarih oluyor . Bir dakika , programlama modelleri mi dedim ?? Evet, ASP.NET teknik
altyapısındaki devrimsel değişiklerin yanı sıra, birden fazla programlama
modelini de emrinize vererek güçlü web ve intranet uygulamalarını kolayca
oluşturmanızı sağlıyor. Bu programlama modellerini teker teker veya birlikte
kullanmakta özgürsünüz. “Web Forms”, ve “Web services” olarak adlandırılan bu
modellerden Web Forms ‘a bu yazıda kısaca bir giriş yapmaya çalışacağız. Web
Services .NET ile gelen bir başka yenilik ve ASP.NET dışında da heyecan verici
olanaklar vaat ediyor. Bir başka yazıda da o konuya göz atarız umarım:) Şimdi kısaca Web Forms’u tanımlayalım: ASP:NET WEB FORMS NEDİR ?? Web Forms, ASP.NET ile yazılım geliştiren programcılara Microsoft
tarafından sağlanan bir programlama modelidir. Web Forms sizi sunucu taraflı
yazılım geliştirmenin klasik sorunlarından kurtarmak için tasarlanmış. Peki
bize ne sağlıyor? Maddeler halinde özetleyelim :
Peki Web Forms kullanan sayfalar
neye benziyor ? İlk söylenebilecek olan: uzantıları .ASPX ( asp.net sayfaları artık .asp yerine
.aspx uzantısını kullanıyor). Mesela
deneme.aspx isminde bir asp.net sayfanız var diyelim. Herhangi bir kullanıcı
sunucudan http://sunucu/deneme.aspx şeklinde bu sayfayı isterse, ilk kullanımında
ASP.NET motoru, sayfayı işliyor ve bir .NET Framework class haline getiriyor.
Daha sonraki istemciler de bu ilk kullanımda ortaya çıkan class’ı kullanıyor.
Yani .aspx sayfası sadece ilk kullanımda derleniyor. Dikkat ettiyseniz “derleniyor “ diyoruz, artık
asp’deki interpreted sayfalar yerine asp.net, derlenmiş sayfaları kullanıyor,
ve bu da başta performans olmak üzere bir çok avantaj sağlıyor. Peki .aspx sayfalarını nasıl hazırlıyoruz. ASP ye göre kolaylık açısından
bir kaybınız yok, herhangi bir metin editörü ile aspx sayfalarınızı
yazabilirsiniz. Bir html sayfasının uzantısını değiştirip .aspx yapsanız, elinizdeki dosya
yine sorunsuz olarak çalışacaktır. Mevcut ASP sayfalarınız da ASP.NET ile syntax olarak uyumludur. Tanıdık
dostlarımız olan <% %> tagleri hala emrimizde, ancak onları eskisi
kadar kullanmayacağız. ( Nedenine
geliyoruz) Asp.NET sunucu kontrolleri: (ASP.NET SERVER CONTROLS) Asp.NET ile gelen sunucu kontrolleri (umarım bu şekilde bir çeviri
uygundur) bize gerçekten büyük kolaylıklar sağlıyor. Bu kolaylıkları görmeden
önce bu kontrolleri nasıl tanımlayacağımıza bakalım: Sunucu taraflı kontroller için kontrol’ün tag’ında runat=”server” ifadesini
kullanıyoruz. Alıştığınız standart html kontrolleri veya kendi tanımlayacağımız
kontroller için de runat=”server” ifadesi
(eğer kullanılabiliyorsa ) çok seveceğiniz bazı kolaylıklar sağlıyor.
Biraz daha somut bir şekilde anlatmaya çalışayım: Demin bahsettiğimiz form örneğinde eğer form’da eksik bir alan varsa,
kullanıcıları tekrar form sayfasına göndermeniz gerekir. Bunu yapmak için iki
yöntem kullanabilirsiniz; ya kullanıcıya tarayıcısının geri tuşunu kullanmasını
söylersiniz, ya da, siz response.redirect() metoduyla o sayfaya geri dönüşü
sağlarsınız. Tabii bu redirect işlemi yüzünden form sayfanız tekrar baştan
yüklenecek, ve kullanıcının bir tane hatalı veya eksik girdiği alan bile olsa
diğer tüm girdiği bilgiler uçacaktır. Web programcısı tabii ki böyle bir duruma izin veremez, bu nedenle bu ileri
geri gidişler sırasında hidden form alanları veya session değişkenleri gibi
yöntemlerle bilgileri kaybetmeden, web uygulamanızın kullanım kolaylığını
sağlamaya çalışırsınız. Nedendir bilinmez, kullanıcılar da sizinle inatlaşmayı
pek bir sevdikleri için sizin iki üç aşamalı form sayfalarınızda oradan oraya
seker dururlar. Sonuçta siz aman formdaki bilgiler kaybolmasın diye destan gibi
kod yazarsınız, ama yine de formda bir açık olma olasılığı vardır. ( Mesela
benim yazdığım bir sipariş modülü bir dönem alıcı adı olmayan isimsiz
siparişler üretiyordu !!! . ) Bütün bu anlattığım sorunlar formlarda
kullandığımız metin kutuları, drop-down list’ler gibi elamanların state
management desteği olmamasından kaynaklanıyor. Yani sunucu taraflı bir
mekanizma ile otomatik olarak belli değerleri saklayamıyoruz. Ancak ASP.NET ile bu sorun ortadan kalkıyor, ve
runat=”server” ifadesi kullanılan bazı tagler, eğer mümkünse ( bir çok kontrol
olduğu için biraz dikkatli yazmak gerekiyor, o sebeple mümkünse diyorum ) state
management olanağına kavuşuyorlar. İyi hoş ama bu ne anlama geliyor şimdi diyorsanız haklısınız, hemen somut
bir örneğe geçelim: Diyelim ki, bir form yazdık, ve bu formu değerlendirmek için tekrar
kendisine yolluyoruz. (Web programcılarının oldukça sık kullandığı bir tekniktir.) Yani deneme.aspx şeklinde bir sayfamız var, ve içeriği de aşağıdaki gibi: <HTML> <HEAD> <title>Asp Web Forms
deneme sayfası</title> </HEAD> <body> <form
method="post" action="deneme.aspx" > <input
type="text"> <input type="submit"
value="Yolla"> </form> </body> </HTML> Bu sayfayı çalıştırdığımızda sadece bir metin kutusu ve bir “yolla” düğmesi
görürüz. Metin alanına herhangi bir şey girip düğmeye basan kullanıcı yine boş
bir form sayfasına çıkacaktır. Peki şimdi kodumuzda ufak bir değişiklik yapalım: <HTML> <HEAD> <title>Asp Web Forms
deneme sayfası</title> </HEAD> <body> <form
method="post" action="deneme.aspx" runat="server"
> <input
type="text" runat="server" > <input type="submit"
value="Yolla"> </form> </body> </HTML> Şimdi formumuza ve form içindeki metin alanına runat="server" ifadesini ekledik. Şimdi sayfayı çalıştıralım ve metin kutusuna herhangi bir şey girip yollayalım . Artık metin
kutusuna girdiğimiz yazı aynen korunuyor ! Metin kutusuna “deneme” yazdıktan
sonra yolla butonuna basın, daha sonra sayfanın kaynak koduna bakarsanız
aşağıdaki kodu göreceksiniz: <HTML> <HEAD> <title>Asp Web Forms deneme
sayfası</title> </HEAD> <body> <form
name="ctrl0" method="post" action="deneme.aspx"
id="ctrl0"> <input
type="hidden" name="__VIEWSTATE"
value="dDwxNzU2ODcxNTcyOzs+" /> <input
name="ctrl1" type="text" value="deneme" />
<input type="submit" value="Yolla"> </form> </body> </HTML> Buradaki en
önemli değişiklik, forma eklenen hidden alan. Bu alanı ASP.NET framework bizler
için oluşturuyor. Burada verilen value değeri ile formunuzda sizin istediğiniz
alanlar için bilgilerin “round trip” sırasında, yani form aynı sayfaya her
postalandığında saklanmasını sağlıyor.
Daha önce ASP ile bizim elle yaptığımız state management artık otomatik
olarak gerçekleştiriliyor. Yani formunuzdaki
alanları siz takip etmek zorunda değilsiniz. Bu da bizi satırlarca kod
yazmaktan ve hata olasılığından kurtarıyor. ASP.NET
framework bizlere web uygulamalarımızda kullanmamız için bir çok server control
sağlıyor. Bunlara ait birkaç örnek için
yukarıdaki formumuzu biraz değiştirelim. <html> <head> <title>web forms örnek sayfası
-2-</title> </head> <body> <center> <form action="deneme2.aspx"
method="post" runat=server> <h3> İsim: <asp:textbox
id="Name" runat="server"/> Departman: <asp:dropdownlist id="Departman"
runat=server> <asp:listitem
>Muhasebe</asp:listitem> <asp:listitem
>Pazarlama</asp:listitem> <asp:listitem
>Reklam</asp:listitem> </asp:dropdownlist> </h3> <asp:button text="Ara"
runat="server"/> </form> </center> </body> </html> Yukarıdaki örnek deneme2.aspx sayfasının
içeriği. Bu sayfayı çalıştırdığımızda karşımıza yine bir form geliyor. Çok
basit bir örnek olduğu için fazla bir işlevselliği yok, ama ufak bir iki
müdahale ile bir şirket için çalışanlara ait bilgileri görebildiğimiz bir
program haline gelebilir. Bir önceki
örneğimize göre farklara bir göz atalım. İlk olarak bu örnekte yeni bir öğe
var: yine server side bir kontrol tanımlıyoruz. Bu sefer bir dropdown list.
Ayrıca ilk örnekte bildiğimiz bir html tag’ine runat=”server” ifadesini
ekleyerek ASP.NET ile gelen state management olanağından faydalandık. (<input type="text" runat="server" > ) Ancak bu
örnekte ASP.NET’in sunucu taraflı kontroller için kullandığı yazımı kullanarak
bir “textbox” tanımladık, ve webforms ile çalışırken kodunuzun tutarlılığı
açısından mümkün olduğunca bu yazılışı
kullanmanızı tavsiye ederim. Textbox kavramı Windows üzerinde IDE kullanarak
program yazan herkese oldukça tanıdık gelecektir. Bence bu isimlendirme bile MS’in web forms ile ASP.NET’i Visual Basic gibi bir geliştirme ortamı
haline getirmeye çalıştırdığının bir kanıtı. Bir parça da
WebForms ile kullandığımız sunucu kontrollerinin syntax’ına, yani sözdizimine
bakalım. <asp:textbox
id="Name" runat="server"/> satırı aslında alıştığımız
HTML tag’lerinden pek de farklı değil. Ancak normal html tag’leri ile
kullandığımız <tag>bla bla </tag> yazımı yerine burada tag’i
kapatmak için <tag ozellik=”asdf” /> şeklinde bir yazım kullanıyoruz.
Eğer isteseydik yukarıdaki textbox kontrolünü <asp:textbox
id="Name" runat="server"></asp:textbox> şeklinde de
yazabilirdik. </asp:dropdownlist> satırı bu şekilde kapatılan bir
kontrolü gösteriyor. Eğer metin kutusuna
deneme yazdıktan sonra formu gönderir, ve geri dönen sayfanın koduna bakarsak: <html> <head> <title>web forms örnek sayfası
-2-</title> </head> <body> <center> <form name="ctrl0"
method="post" action="deneme2.aspx"
id="ctrl0"> <input
type="hidden" name="__VIEWSTATE"
value="dDwxMTIxNjIzODQyOzs+" /> <h3> İsim: <input
name="Name" type="text" value="deneme"
id="Name" /> Departman: <select name="Departman"
id="Departman"> <option
selected="selected"
value="Muhasebe">Muhasebe</option> <option
value="Pazarlama">Pazarlama</option> <option
value="Reklam">Reklam</option> </select> </h3> <input type="submit"
name="ctrl1" value="Ara" /> </form> </center> </body> </html> Bu sayfada
da, hidden alan sayesinde kontrollerimize verilen değerlerin saklandığını
görebiliriz.Sunu taraflı kontroller sadece textbox, veya dropdown list gibi
basit kontrollerle sınırlı değil. Bir sürü son derece faydalı kontrol size
sunuluyor, ve eskiden saatlerinizi alan veritabanı bağlantısı gibi karmaşık
işler bile bu kontroller tarafından kolayca halledilebiliyor. Tabii kendi
kontrollerinizi de yazabilir, ve istediğiniz yerlerde kullanabilirsiniz. Mesela
bir web uygulaması için sürekli yapılması gereken ve birden fazla yerde
kullanılan bir veritabanı sorgunuz var. Bu işi yapan bir kontrol yazdıktan
sonra projenizde istediğiniz yerde kullanabilirsiniz. Tek yapmanız gereken
istediğiniz yerde size ait kontrolü kullanmak. Peki
webforms sadece bu bahsettiğimiz özelliklerden mi ibaret ? Yani bu kadar
gürültüyü sadece değerlerini saklayabilen form elamanları için mi kopartıyorum
? :) Tabii ki hayır. Sunucu
kontrollerinin çok önemli bir başka özelliği daha var, o da bu kontroller
kullanıldığında oluşabilecek olaylara karşılık gelen kodlar yazabilmeniz. Daha
önce bahsettiğimiz “event driven code” yani olay güdümlü kod, bu şekilde
yazılabiliyor. Visual
basic, delphi gibi görsel geliştirme araçları kullananlar için bu güzel bir
haber, çünkü Ms Visual Studio .NET ile
aynı bir VB formu üzerinde çalışır gibi bir web sayfası üzerinde çalışıyor, ve
şu düğmeye basılınca bu metin değişsin, veya bu listbox ‘a veritabanından şu
bilgiler yazılsın diyebiliyorsunuz. Eğer VS.NET
ile çalışma şansınız yoksa, bir kaybınız yok, çünkü yine notepad ile bile event
driven kod yazma imkanınız var. Bir parça da bu konu hakkında pratik yapalım. <html> <head> <title>WebForms örnek sayfası
-3-</title> </head> <script language="VB"
runat=server> Sub SubmitBtn_Click(Sender As Object, E
As EventArgs) Mesaj.Text = "Merhaba "
& isim.Text & ", Seçtiğiniz kategori: " & kategori.SelectedItem.Text End Sub </script> <body> <center> <form action="deneme3.aspx"
method="post" runat="server"> <h3> İsim: <asp:textbox
id="isim" runat="server"/> Kategori: <asp:dropdownlist id="kategori"
runat=server> <asp:listitem
>Güncel</asp:listitem> <asp:listitem
>Mizah</asp:listitem> <asp:listitem
>Teknoloji</asp:listitem> </asp:dropdownlist> </h3> <asp:button text="ARA"
OnClick="SubmitBtn_Click" runat="server"/> <p> <asp:label id="Mesaj"
runat="server"/> </form> </center> </body> </html> Yukarıdaki sayfamız tahmin edeceğiniz gibi deneme3.aspx . Bu sayfayı
çalıştırdığımızda ilk başta bir önceki örnekte olduğu gibi boş bir form sayfası
ile karşılaşıyoruz. İsim kutucuğuna adımızı girip ara düğmesine tıklarsak,
girdiğimiz metnin ve kategorinin kullanıldığı
“Merhaba isim, Seçtiğiniz kategori: kategori” şeklinde bir mesaj
görüyoruz. Peki bunda ne var diyebilirsiniz, sonuçta normal ASP ile
yapamayacağımız sihirli bir numara değil. Ama bu basit örnek çok karmaşık web
yazılımlarını yazabileceğiniz bir sisteme ait ipuçları veriyor. Biraz daha
yakından bakalım: <script language="VB" runat=server> Sub SubmitBtn_Click(Sender As
Object, E As EventArgs) Mesaj.Text = "Merhaba
" & isim.Text & ", Seçtiğiniz kategori: " & kategori.SelectedItem.Text End Sub </script> İşte bu kısım bizim ara düğmesine tıklandığında ne olacağını belirttiğimiz
kod parçası. Dil olarak VB script kullanıyoruz, aslında C# kullanmak isterdim
ama en azından dil açısından kafa karışıklığını biraz azaltmak istedim :) Sub
ile başkayan satırda, SubmitBtn_Click isimli prosedürü tanımlıyoruz.
( Ufak bir hatırlatma VB, bir değer döndürmeyen fonksiyonlar için bu
gördüğümüz sub tanımını kullanıyor ) . Beklenen parametreleri gösteren (Sender As Object, E As EventArgs) kısmını bu
yazı için geçiyoruz, sadece bu parametrelerin .NET framework ile ilgili bir
standart sebebiyle yazılmak zorunda olduğunu bilmeniz yeterli. Zaten sub içinde
bu parametreleri de kullanmıyoruz. Sub içinde ne yaptığımıza bakarsak: “mesaj”
adını verdiğimiz label kontrolünün içeriğini, metin kutusuna girilen değer ve
seçilen kategori ile değiştiriyoruz. Şimdi bu saydaki işleyişi adım adım gözden
geçirelim:
Mesaj.Text = "Merhaba " & isim.Text
& ", Seçtiğiniz kategori: " & kategori.SelectedItem.Text Satırı ile label’in içerdiği metin değişiyor. Burada bir başka önemli nokta da , label
kontrolünün aynı görsel yazılım geliştirme araçlarında (VB, Dephi ) sağlanan
kontroller gibi bir “text” property’si sağlaması, ve bizim bunu kod ile
değiştirebilmemiz. İlk bakışta biraz karmaşık gibi görünebilir, ancak bir iki kere dikkatle
incelerseniz, kolayca kavrayabilirsiniz. Bu örnek, biraz yukarıda belirttiğim
gibi biraz kısa da olsa, WebForms ile
gelen programlama modelini basitçe özetliyor. Bu sistemi kullanarak bir çok
uygulamayı mevcut metodlardan çok daha verimli ve kolay şekilde oluşturmanız
mümkün. Bir de bizim burada kullandığımız kodun büyük kısmının VS.NET
tarafından otomatik olarak oluşturulması gibi bir olanak var ki, işimizi iyice kolaylaştırıyor. Bu noktaya kadar gördüklerimizi kısaca özetleyelim:
Şimdi bir parça düşünerek, bu bilgiler ile WebForms için nasıl uygulama
alanları bulabileceğimize bakalım. Mesela bir firmanın çalışanlarına ait
bilgileri veya stoktaki malları arayıp, sonuçları görebileceğimiz bir sayfayı
kolaylıkla bu yapıya oturtabiliriz. Veya hemen her ticari sitede kullanılan
alışveriş sepeti modülü için oldukça pratik bir çözüm olabilir. ( Sepette yapılan bir kitaptan birkaç tane
alma, fiyatı yeniden hesaplama, veya bir kitabı sepetten çıkarma gibi işlemler
sepet sayfasının bir form olarak tasarlanması ve tekrar kendine gönderilmesi
yöntemi ile yapılır. ) Tabii önemli bir diğer nokta da, burada verdiğim son derece sınırlı bilgilerin , bir çok
sorunu tamamen çözmekte yetersiz kalacağı :) .NET ve ASP.NET son derece geniş
ve karmaşık sistemler , ve bunun gibi belki yüzlerce yazı bile sizi tamamıyla
bu yapıya hakim kılmaz. Biraz daha açarsak, burada sözünü bile etmediğimiz bir
çok yenilik anlatılmak için sırasını bekliyor. WebForms’un teknik altyapısı,
server controls, validation controls, codebehind gibi “ O ne yahu ?” dedirten
bir çok kavramı zamanla gördükçe, ASP.NET ile gelen yenilikleri daha iyi
kavrayacak, ve konuya daha hakim hale geleceksiniz.Ancak bunu yapmak için
mümkün olduğunca çok araştırmanız, okumanız ve çalışmanız gerekiyor. Eh, Web’in
her yeri kaynakla dolu olduğuna göre, klavyenize, ve gözlerinize kuvvet. Yukarıda bahsettiğim konularda başka yazılarda görüşmek üzere... | |
Yazgelistir.com | |