SlideShare una empresa de Scribd logo
1 de 67
Descargar para leer sin conexión
İnternet Programcılığı II
T.C. Mehmet Akif Ersoy Üniversitesi Gölhisar Meslek Yüksekokulu
*ASP.Net Microsoft tarafından tasarlanan web uygulama dilidir. Programcılar
ASP.Net kullanarak dinamik web siteleri, web uygulamaları ve XML web
servisleri geliştirebilirler. ASP.Net .Net platformunun bir parçasıdır ve ASP’nin
devamı olarak nitelendirilmektedir. ASP.Net Common Language Runtime
üzerine inşa edilmiştir, bu demektirki programcılar herhangi bir Microsoft .NET
dilini kullanarak ASP.Net kodu üretebilirler.+
Öğr.Gör. Gökhan TURAN
http://www.gokhanturan.com
gokhanturan@gokhanturan.com
2
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
HTML Nedir?
Web sayfalarının büyük çoğunluğu HTML içeren metin tabanlı sayfalar olarak hazırlanmaktadır. Bu sayfalar istemci
tarafında çalıştığı için kaynak kodlar kullanıcı tarafından görülmektedir.
İşlem basamakları
1. Web sunucu istekte bulunulan adresin dosya uzantısından dosyanın bir html dosyası olduğunu algılar.
2. HTML dosya sabit diskten okunarak istemciye gönderilir.
3. İstemcideki web tarayıcı dosyayı yorumlar ve sonucu gösterir.
HTML avantajları
1. Tüm tarayıcılarda düzgün bir şekilde gösterilebilir.
2. Her istek hızlı gerçekleştirilir ve en az düzeyde kaynak kullanılır.
3. Öğrenmek kolaydır.
HTML dezavantajları
1. Çok etkileşimli değildir.
2. Tasarımları düzenlenmesi ve kontrolü zordur.
3. Çok sayıda sayfa içeren siteler için kullanışlı değildir.
4. Hızlı değişen içerik ve kişiselleştirmeler için kullanışlı değildir.
Microsoft .NET nedir?
Microsoft .NET insanların, bilginin, sistemlerin ve cihazların iletişimini sağlayan bir platformdur. İstemci ve sunucu
uygulamaların yanı sıra geliştirme araçlarını da kapsamaktadır. Bu oluşum içerisinde aynı zamanda:
3
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Web tabanlı uygulamaların, web servislerinin ve her türlü uygulamanın geliştirilip çalıştırılabildiği bir platform olan
.NET Framework de bulunmaktadır. .NET Framework ile uygulamalar iletişim standartlarına (SOAP, XML, HTTP vb)
uygun olarak geliştirilebilmektedir.
Visual Studio .NET, entegre geliştirme ortamlarına (Integrated Development Environment - IDE ) ve araçlara
sahiptir. Bu araçlar sayesinde .NET Framework ile uygulama geliştirme daha kolay hale gelmekte ve verimlilik
maksimum düzeye ulaşmaktadır.
.NET Framework nedir?
Microsoft .NET Framework, uygulamaların ve web servislerinin inşa edilebildiği (build), yayımının yapılabildiği
(deploy) ve çalıştırılabildiği (run) bir platformdur.
"Build - Deploy - Run" .NET Framework platformu için üç anahtar kelimedir. Verimliliği yüksek, standartlara uygun
ve çoklu dil desteği bulunan bir platformdur. Internet ölçekli uygulamaların operasyonu ve yayımlanması için
karşımıza çıkan zorluklar .NET Framework'ün sağladığı servisler sayesinde rahatlıkla aşılabilmektedir. .NET
Framework iki temel bölümden oluşmaktadır: Common Lanuguage Runtime, Hiyerarşik düzendeki sınıf
kütüphanesi.
.NET Framework: 20 den fazla programlama diline destek vermekte, uygulama geliştiricilerin iş mantığı (business
logic) içeren kod kısmına yoğunlaşmalarını sağlamakta, güvenli, sağlam, yüksek performanslı uygulamaların
geliştirilebilmesini sağlamaktadır. Eskiye göre; geliştirme, yayımlama ve yönetimin çok daha kolay olduğu bir
platformdur.
4
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
ASP Nedir?
Sunucu taraflı bir teknoloji olan ASP, kullanıcı tarafına etkileşimli, dinamik Web sayfaları göndermek için kullanılır.
ASP, Web programcılarına HTML, scripting ve kullanıcıdan bağımsız veritabanı uygulamalarını özgürce kullanma
fırsatı verir.
ASP programlama ortamının özgür olmasının sebebi tüm derleme işleminin sunucu tarafında bitmesi ve kullanıcının
sadece sonuçta oluşan HTML sayfalarını görmesidir.
ASP Nasıl Çalışır?
Tarayıcıya açmasını istediğiniz dosyanın adresini yazıp çağırdığımızda (Sunucu) kendisinden icra etmesini istediğiniz
dosyayı arar bulur ve eğer bulursa, bu dosyayı hemen "asp.dll" adlı bir programa iletir. asp.dll'de aldığı bu dosyayı
hemen yorumlamaz. "Global. asa" adlı dosyanın çalışıp çalışmadığını kontrol eder.
Asp.dll önce gelen dosyada hangi script dilinin kullanıldığına bakar. Ve buna göre kendini hazırlar. Asp.dll sonra bu
derlediği bilgileri, tamamen asp kodlarından ayrılmış, temiz bir halde browser'a gönderir. Bizde böylece sadece
HTML kodlarını görürüz.
ASP.Net Nedir?
Asp.net Microsoft tarafından tasarlanan web uygulama dilidir. Programcılar asp.net kullanarak dinamik web
siteleri, web uygulamaları ve XML web servisleri geliştirebilirler. Asp.net .Net platformunun bir parçasıdır ve asp nin
devamı olarak nitelendirilmektedir.
5
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Asp.net Common Language Runtime üzerine inşa edilmiştir, bu demektirki programcılar herhangi bir Microsoft .NET
dilini kullanarak asp.net kodu üretebilirler.
ASPX Uzantısı
Aspx uzantısı asp.net de programlanan web sitelerinin uzantısıdır. Eğer bir web sayfasının uzatısı aspx ise bu
demektir ki, bu web sitesi asp.net kullanarak tasarlanmıştır. Aspx dosyası içerisinde <% -- dinamik kod --%> php,jsp
ve asp’de de olduğu gibi direk sayfa üzerinde asp.net kodlarıda yazılabilir. Fakat tavsiye edilen asp.net kodlarının
code-behind modelinde yazılmasıdır ( Arka plan kodları ). Bu modeli kullandığımızda asp.net kodlarını başka bir
sayfaya kaydeder. Örnek olarak: index.aspx.cs veya index.aspx.vb bu sayfaları Microsoft Visual Studio otomatik
olarak sizin için yaratır. Bu şekilde yazılan bir web sitesinde programcılar bir olay üzerine kod yazabilirler. Örnek
olarak: Page_load (Sayfa üretildiğinde )
ASP.NET de Performans
ASPX ve diğer dosyalar IIS virtual host denilen yerde tutulurlar. İlk sayfa açılışında .NET Framework dosyaları .NET
assembly diline çevirerek cevap verir ve dll dosyası yaratır. Diğer açılışlarda da bu dll leri kullanır ve bu bize çok
büyük bir performans sağlar.
Avantajları Nelerdir?
ASP.NET, daha önce kullanılan Web geliştirme (ASP, JSP gibi) modellerine göre aşağıda listelenen birçok önemli
avantajı sağlamaktadır:
1) Geliştirilmiş Performans
ASP.Net sayfaları, sunucu üzerinde çalıştırılan NGWS çalıştırıcısı kodlarıdır. Yorumlama temeline göre çalışan daha
öncekilerle (ASP gibi) karşılaştırıldığında, erken bağdaştırma (early binding), tam zamanında derleme (just-in-time
compilation) ve doğal iyileme (native optimization) ve tamponlama hizmetleri (caching services) gibi avantajlar
sağlamaktadır. Yukarıda anılan bu özellikler, geliştiriciler için daha kod yazmaya başlamadan önce sağlanan çarpıcı
performans iyileştirmeleridir.
2) Üstün Nitelikli Araç Desteği
ASP.Net çatısı, geliştirme ortamıyla bütünleştirilmiş olan Visual Studio ile sunulan zengin bir araç takımı ve
tasarımcısı ile tamamlanmıştır. WYSIWYG düzenleme (editing), sürükle-bırak tarzı sunucu denetimleri (server
controls) ve otomatik dağıtım (deployment) bu güçlü araçların sağlamış olduğu özelliklerin yalnızca birkaç
tanesinden bazılarıdır.
3) Güç ve Esneklik
ASP.Net, NGWS çalıştırıcısı üzerine temellendirildiğinden, bu platformun tüm esneklik ve gücü Web uygulama
geliştiricisi tarafından kullanılabilir durumdadır. NGWS çalıştırıcısının Temel Sınıf Kütüphaneleri (Base Class
libraries), iletim (messaging) ve veri erişim (data access) çözümleri, benzeri olmayan bir biçimde Web"ten erişilebilir
6
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
durumdadır. ASP.NET, ayrıca dile bağımlı değildir, şöyle ki, geliştiriciler uygulamalarında en uygun olan dili seçerek
kodlama yapabilir. Hatta uygulamaların değişik bölümleri değişik dillerde yazılarak karma programlama
avantajlarından yararlanmak söz konusudur. Dahası, ASP.Net"a geçiş söz konusu olduğunda, hali hazır kullanılmakta
olan COM tabanlı uygulamalara yapılan yatırımlar NGWS çalıştırıcısının karşılıklı işleyebilirlik (interoperability)
desteğiyle ile garanti altına alınmaktadır.
4) Basitlik
ASP.NET, basit form bilgileri gönderiminden, kimlik doğrulama, kullanıcı tanıma, uygulama dağıtımı ve site
yapılandırmaya kadar tüm genel görevleri yapmayı son derece basitleştirmektedir. Örneğin, ASP.NET Sayfa
Anaçatısı, uygulama mantığı, olay eldesi ve sunum (veya görüntüleme) kodlarının tıpkı VB-benzeri form işleme
modelinde olduğu gibi net şekilde ayrılmasını sağlayarak daha kolay okunabilir ve yönetilebilir kullanıcı arayüzleri
oluşturulmasını mümkün kılmaktadır. NGWS çalıştırıcısı ayrıca otomatik referans sayımı ve çöp toplama gibi
yönetilebilen kod servisleri ile de geliştirme işlemini basitleştirmektedir.
5) Yönetilebilirlik
ASP.NET, metin-tabanlı ve hiyerarşik bir yapılandırma sistemi kullanır. Böylelikle sunucu ortamı ve Web
uygulamasına özel ayarların yapılması son derece basitleştirilmiştir. Çünkü yapılandırma bilgisi düz metin olarak
depolanır, yeni ayarlar yerel yönetim araçlarını kullanmaksızın basit bir metin işlemci aracılığıyla yapılabilir. "Sıfır
Yerel Yönetim" filozofisi ASP.NET uygulamalarının dağıtımını oldukça basitleştirir. Bir ASP.NET uygulaması, çok basit
bir biçimde gerekli dosyaların sunucuya kopyalanması şeklinde dağıtılır. Sunucuyu yeniden başlatma veya derlenmiş
kodun değiştirilmesi gibi işlemlere gerek yoktur.
6) Ölçeklenebilirlik ve Elde Edilebilirlik
ASP.NET, ölçeklenebilirlik düşünülerek tasarlanmıştır. Bu nedenle, kümelenmiş ve çok-işlemcili ortamlarda
performansı iyileştirmek üzere özel olarak tasarlanmış niteliklere sahiptir. Dahası, işlemler ASP.NET, çalıştırıcı
(runtime) tarafından yakından izlenir ve yönetilir. Böylece yanlış davranan bir işlem (leaks, deadlock) varsa onun
yerine uygulamanın istemleri devamlı şekilde yanıtlamasına yardım eden yeni bir işlem başlatılır.
7) İsteğe Bağlı Biçimlendirme ve Uzatılabilirlik
ASP.NET, geliştiricilerin uygun gördüğü yerlerde kodlarına takı ("plug-in") yapmalarına izin veren iyi-faktörlü bir
mimari sunmaktadır. Gerçekten de, ASP.NET çalıştırıcısının herhangi bir alt bileşenini kendi yazdığınız herhangi bir
bileşenle zenginleştirebilir veya değiştirebilirsiniz. İsteğe bağlı doğrulama veya durum (state) servislerinin
uygulanması hiçbir zaman olmadığından daha kolay hale getirilmiştir
8) Programlama Dilinde Bağımsızlık
ASP.NET programlama dillerimden bağımsızdır. ASP.NET web yazılımları geliştirebilmek için 20 programlama dili ve
fazlasını kullanabiliriz, örneğin, VB.NET, C#, JScript.NET, C++ with Managed Extensions, COBOL.NET, Perl.NET.
9) Derlenmiş Kod
Bildiğimiz gibi asp scripting dilleriyle çalışıyor. Fakat ASP.NET derlenmiş kod ve güçlü tipli dillerle çalışıyor, yani
gerçek programlama dilleriyle. ASP.NET bu nedenle gerçek veri tiplerini kullanıyor örneğin integers ve strings.
ASP.NET de kullanılan programlama dilleri daha iyi olağanüstü durum işleme gücüne sahiptirler. ASP.NET içerisinde
try … catch … finally deyimleri ile olağanüstü durum işleme imkanına sahibiz.
10) Sürükle & Bırak ve Olay Bazlı Programlama
7
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Eğer Visual Basic kullandıysanız, bilirsiniz ki VB’nin en güzel taraflarından birisi sürükle ve bırak objeleri sistemi ve
olay bazlı programlama yani click, doubleclick, textchange gibi. ASP.NET bu özellikleri WEB Formlarıyla aynı şekilde
kullanabilirisiniz. VB’de nasıl program geliştiriyorsanız, ASP.NET Web Formları da yani fonksiyonelliği sağlıyor.
ASP.NET içerisinde gerçekten çok iyi dizayn edilmiş ve çok sayıda HTML kontrolleri vardır. Hemen hemen bir
ASP.NET sayfasında bulunan bütün HTML kontrolleri Visual Basic, C#, C++ kodları ile kontrol edilebilir. ASP.NET buna
ek olarak yeni nesneye dayalı programlamayı destekleyen, girdi kontrolleri, programlanabilir listbox’lari, yeni
doğrulama kontrolleri (validation controls). ASP.NET içerisinde örneğin DataGrid, DataList kontrolleri olup bu
kontroller web yazılım geliştiricisinin hayatini çok kolaylaştırmaktadır.
11) Mobile Programlama Desteği
ASP.NET ile sadece web yazılımları değil ayrıca mobil telefonları ve PDA’lar (Palm, PocketPC’s, RIM devices, etc)
içinde yazılım geliştirebilirsiniz. ASP.NET de mobil aletleri için WML (Wireless Markup Language) veya HTML 3.2
(Hyper Text Markup Language) veya cHTML (Compact Hyper Text Markup Language) of I-mode aletlerini destek
sağlar. ASP.NET mobil aletin kullandığı protokolü otomatik olarak belirler ve ona göre sonucu geri döndürür.
12) Bağlantısız Veri Erişimi
Asp ve ADO nun en önemli sorunlarından birisi ADO her zaman veritabanına canlı bağlantıyı tutar. Buda asp
sayfalarının çalıştırılmasını önemli ölçüde yavaşlatır. ADO.NET bağlantısız veri erişimini sağlayan sistemi bizim
kullanımımıza sunar.
13) Session state
Asp session değişkenleri desteği çok sınırlıdır ve birden fazla web server dan oluşan sistemde session değişkenlerini
hiç desteklemez. ASP.NET de ise olay tamamen değişiyor, birçok session depolama metodunu destekler örneğin In-
Process (asp ile ayni), out-of-process (session durumu başka bir bilgisayardaki Windows Servis ile sağlanır) ve SQL
Server’da. Out-of-process ve SQL Server seçenekleri web form desteği sağlar.
14) Güvenlik Desteği
Asp sadece IIS authentication metodlarını desteklerken ASP.NET daha geniş güvenlik sistemini destekliyor örneğin
IIS/Windows doğrulama sistemlerinden Basic doğrulama, Digest doğrulama, Integrated Windows doğrulama, Form
bazlı doğrulama ve Microsoft Passport doğrulama. ASP.NET içerisinde yeni olarak Windows kullanıcı doğrulama
(windows authentication) sistemine ek olarak form bazlı kullanıcı doğrulama (forms-based user authentication)
sistemi geliştirilmiştir. Bu yeni sistemde çerez yönetimi (cookie management) ve otomatik olarak doğrulanmayan
kullanıcıların başka bir web sayfasına gönderilmesi (automatic redirecting of unauthorized logins) gibi güzel
özellikler eklenmiştir. İzlemek, Debug, ve Bellekleme Desteği (Tracing, debugging and caching support) asp
sisteminde kodu izlemek ve BUG’lari bulmak bir derttir. Fakat ASP.NET içerisinde bu sistem çok daha geliştirilmiş,
adım adım debug olayı ve diğer trace ve debug metotlarını desteklemektedir. ASP.NET bunlara ek olarak mükemmel
bellekleme (caching API) sağlamaktadır. Verileri bellekleme sistem output caching, data caching, dependent caching
ve fragment caching metodlarını destekler.
15) XML Bazlı Konfigürasyon
Asp içerisinde ise konfigürasyon bilgileri çok değişik yerlerde saklanıyordu. Örneğin, IIS bilgileri IIS ****base
(registry) de saklanmaktadır. Eğer COM/ COM+ bileşenlerini kullanıyorsanız, COM ve COM+ bileşenlerinin bütün
bilgileri registry ve COM+ Catalog da saklanır. ASP.NET konfigürasyonu metin dosyaları ile yapılır. Bu metin dosyaları
XML dosyalarıdır. ASP.NET de XML ayrı bir önem kazanmıştır. ASP.NET de çalışan programı kesmeden bu
konfigürasyon dosyaları değiştirilebilir. ASP.NET bunu arka planda, kullanıcıdan saklayarak halleder. Yeni bir web
isteği geldiğinde ASP.NET worker process (çalışan işlemci) yeni konfigürasyonla isleme devam eder.
8
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
16) XCopy Kurulum
COM bileşenlerinden farklı olarak .NET bileşenleri Windows registry’e kayıt edilmesine gerek yoktur. Yapmamız
gereken tek şey bileşeni derlemek, ASP.NET yazılımının bulunduğu klasörde BIN isimli bir klasöre ekledikten sonra
bu derlediğimiz bileşeni kopyalamaktır. Gördüğünüz gibi artık registry ile uğraşmak yok. Bu gerçekten Microsoft’un
uzun zamandır yapması gereken bir değişiklik idi.
17) Hosting Seçenekleri
Asp bir ISAPI programı olup IIS e bağlıdır.Buna karsın, ASP.NET ise .NET framework üzerinde çalışır, böylece ASP.NET
sayfaları bu nedenle IIS dışındaki web serverları tarafından da sunulabilecektir.
18) Daha hızlı web uygulamaları
ASP.NET derlenmiş kod ve saklanma işlemi ile hız kazanıyor. Daha önceki ASP sürümlerinde bir kullanıcı web sitesine
girdiği zaman bilgisayar üzerinde anlık derlemeler yapılırdı ve bu hız kaybına neden olurdu. Artık ASP.NET ile
hazırlanmış bir kod, bir ziyaretçi tarafından hiçbir zaman ziyaret edilmese bile derleniyor. Saklama işlemiyle de
hafızaya bilgi depolanıp, bu sayede kullanıcılara verilerin daha hızlı yollanması sağlanabiliyor.
ASP.NET ile programcılar sayfalarını her kullanımda yeniden aratmak yerine bir kısmını "caching" yani tamponlama
işlemi sayesinde daha hızlı erişilebilir hale getirebiliyorlar. Bir diğer değişiklik ise ASP.NET ile veritabanındaki belirli
verilerin saklanabilir hale getirilebilmesi. Bu sayede çok değişmeyen bir veritabanını her seferinde tekrar yüklenmek
yerine, hızlı erişilebilir forma sokulmuş oluyor.
19) Güçlü veritabanı fonksiyonları
ASP gibi ASP.NET de programcıların veri tabanlarıyla etkileşimli çalışabilen web uygulamaları yapabilmesine izin
veriyor. ASP.NET"in asıl avantajlı bir çok programlama aracına imkan veren Nesne Merkezli (Object Oriented)
programlama ile çalışması. Bu sayede daha fonksiyonel ve daha hızlı tasarıma imkân sağlıyor.
20) Hafıza sızıntısı ve çökme koruması
ASP.NET teki en çok beğenilen yeniliklerin başında hafıza sızıntısı ve çökme koruması özellikleri geliyor. Özellikle
hafıza sızıntısı, çoğu kullanıcı tarafından pek bilinen bir konu değilken, sistem yöneticilerini sıkıntıya sokan
durumlardan biridir. ASP.NET ile bu hatalar otomatik olarak düzeltilerek, kullanıcıların her zaman web sitesine
ulaşabilmesi sağlanıyor.
21) Çoklu dil desteği
Programcılar artık 25"ten fazla .NET dili ile ASP.NET"i kullanabiliyorlar. Bu dillerden bazıları VB.NET, C# ve Jscript
NET. Geniş dil desteği sayesinde birçok programcı web uygulamalarını kolayca hizmete sunabiliyor.
22) .NET"in parçası olmak
.NET çatısı 3400"den fazla sınıftan oluşan bir yapıya sahip, ASP.NET de .NET"in bir parçası olduğu için neredeyse
web uygulaması olarak yapılamayacak hiçbir şey yokmuş gibi gözüküyor.
23) Programlar ve HTML artık aynı sayfada değil
Önceki sürüm ASP’lerde göze çarpan sorunlardan biri HTML sayfasında programlamanın da görünmesiydi. Diğer bir
deyişle, scriptler ve HTML aynı sayfadaydı. Artık gösterilen kod ile script kodu ayrılmış olduğundan, Microsoft bunun
önüne geçmek için bir önlem almış gibi görünüyor.
9
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Dezavantajları
1) Windows zorunluluğu
ASP.NET halen Windows işletim sistemi kullanan bir sunucu üzerinde yapılandırılmak zorunda; kısacası platform
bağımsız değil. ASP’de de olan bu sorunu çözmek için Linux sistemlerinde çalışan birkaç ASP hosting sunucusu
geliştirildiyse de, işin açıkçası pek başarılı olabilmiş değil. ASP.NET de hali hazırda Windows ve IIS (Internet
Information Server)’a mahkûm görünüyor.
2) Eklenti krizi
ASP.NET kaynak olarak bedava gibi görünebilir ama programlama konusunda bilgili değilseniz hazırlıklı olmanız
gereken bir durum var, o da eklentiler. Bir işlemi yapmak için gereken eklentiler genelde ücretli olarak satılıyor.
Tabii saatlerce uğraştan sonra bedava olan birkaç eklentiyi zor da olsa bulabilirsiniz.
3) Hosting maliyeti
Eğer dışarıdan hosting hizmeti alacaksanız biraz daha fazla para ödemeye hazırlıklı olmanız gerekiyor. Çünkü genel
olarak Windows hosting daha pahalı ki bu da normal olması gereken bir fark.
4) Güvenlik
Güvenlik açıkları ASP.NET"ten değil ne yazık ki IIS"ten kaynaklanıyor. Her yeni sürümde açıkları kapansa da IIS dünya
çapında güvenlik açıklarıyla ünlü. Fakat .NET ile bununda bir dezavantaj olmaktan çıkması bekleniyor.
5) Bedava değil
Evet, buna bir çok kişi şaşıracak ama temelde ASP.NET bedava değil. Ne de olsa kendi bilgisayarınızda ASP.NET
kullanabilmek için (lisanslı) bir Windows sürümüne ihtiyacınız var. Bu da demek ki tam anlamıyla bedava değil.
ASP.Net Web Uygulamaları
Bir web projesi açmak için VS.NET 2008’i açtıktan sonra üst menüden File > New > Web Site seçeneğinin
seçtikten sonra karşımıza web site açma penceresi gelecektir. Açılan pencerede Templates kısmından
ASP.NET Web Site seçeneğini seçin. Language seçeneğinin C# olmasına dikkat edin. Location kısmından
File System’i oradanda nereye kaydedecekseniz konumu belirtiniz ve OK düğmesine basınız.
10
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Resim 1:Visual Studio 2008
Resim 2:Yeni Web Sayfası Oluşturma Penceresi
11
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Resim 3:Visual Studio 2008 İle ASP.Net Web Sayfası Tasarlama
Sol bölümde Toolbox (araçlar) yeralmaktadır. Orta kısım tasarım yapılan yerdir. Sağda üstte Solution Explorer
bulunmaktadır. Solution Explorer’de projede yer alan tüm dosyalar ve klasörler listelenmektedir. Onun altında ise
Properties bölümü yer almaktadır. Tasarım kısmında seçilen nesnenin özellikleri gösterilmektedir.
Bir Web sayfası tasarımı üç farklı yerden yapılmaktadır. Örneğin Default.aspx dosyası tasarımında: Solution
Explorer’de Default.aspx’in altında bağlı olarak Default.aspx.cs görülmektedir. Default.aspx.cs dosyası program
kodlarının bulunduğu dosyadır. Default.aspx ise html kodları ile sayfa tasarımını içermektedir.
Default.aspx açıldığında (html kodlarını içeren sayfa) farklı iki görünüm vardır. Birincisi Design (Tasarım) görünümü.
Bunda sayfa tasarımı tamamen görsel olarak yapılmaktadır. Source (html kod) görünümde ise sayfanın ASP.NET için
geliştirilmiş html kodları görülmektedir.
Default.aspx.cs dosyasında ise C# dili ile yazılan ve asp kontrollerine ait program kodlerı görülmektedir.
ToolBox Tasarım Alanı
Solution
Explorer
Properties
12
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Resim 4: C# Dili İle ASP.Net Web Sayfası Tasarlama
Visual Web Developer Web Server Nedir?
Biraz önceki uygulamamızda F5 e bastıkdan sonra taskbarımızın üstünde bir baloncuk çıktı (Resim 5) Bu
ifade web uygulamalarını geliştirmek için kullanılan local Web Server olup, IIS yapısının extra özelliklerini
içermez. Önceleri IIS de ayarlama sorunları yaşadığımız olmuştur. .NET 2008 platformu kendi IIS ini
çalıştırdığından IIS bazındaki sorunlar ortadan kalkmıştır.
Resim 5: ASP.Net Development Server
Evet artık ASP.Net uygulamalarımızı geliştirebiliriz. Bunu için açtığınız projenin çalışması durduğundan
emin olun. Çalışma durumunu durdurmak için açılan internet Explorer penceresini kapatmak yeterli
olacaktır.
ASP.Net Kontrolleri
13
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Server Kontrol Nedir?
Kullanıcı arabirimi veya diğer ilişkisel fonksiyonlar oluşturmak üzere Server üzerinde çalışan
componentlere denir. Server kontroller runat= “server” özelliğine sahiptirler. (Resim 6)
Resim 6: Server Kontrol
Standart Kontroller
ASP.NET ile web sitesi tasarımında html kontrolleri istenirse kullanılabilir. Fakat ASP kontrolleri gelişmiş özelliklere
sahip olduğu için tercih edilir. En çok kullanılan ASP.NET kontrolleri aşağıda verilmiştir.
Resim 7:Standart Kontroller
14
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Label: Sayfa üzerinde yazı yazmak için kullanılır. Normalde sayfa üzerine doğrudan da yazı yazılabilir. Fakat Label
kontrolü kullanılırsa program kodları ile yazı yazdırılabilir.
Properties penceresinden bazı özelliklerinin açıklaması ise;
Textbox: Kullanıcıların bilgi girişi için kullanılan kontroldür. Özellikle üyelik kayıt, şifre doğrulamalarda
yaygın olarak kullanılır.
Properties penceresinden bazı özelliklerinin açıklaması ise;
Button: Tüm windows uygulamalarında Tamam, Uygula, İptal vb. olarak gördüğümüz basma (click)
özelliğine sahip kontroldür.
Properties penceresinden bazı özelliklerinin açıklaması ise;
15
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
3) Butonumuzun üstünü çift tıklayarak Button1_Click özelliğine aşağıdaki kodu yazalım.
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = TextBox1.Text + "Merhaba Dünya..!";
}
4) Kodumuzu yazdıktan sonra çalıştıralım. Textbox’a ”ASP.Net İle” sonra butonu tıklayalım.
Link Button: Bir çok özelliği butona benzeyen Link buttonu link vermek için kullanır. Click özelliğine
kodumuzu yazarak yönlendirme yapabiliriz.
Image Button: LinkButton ile işlevi aynıdır. Tek farkı Link yazısının yerine resim gelir. Resim getirmek
için Properties penceresinden ImageURL seçeneğinden resmi belirleyebilirsiniz.
1
1) File>New>Web Site seçeneğini seçerek yeni bir web sitesi oluşturalım.
2) Web sitemize birer adet button, textbox ve label yerleştirelim.
16
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
4) Sonrasında Image Button’a çift tıklayın ve aşağıdaki kodu yazın.
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
Response.Redirect("http://www.gokhanturan.com");
}
Kodumuzu yazıp çalıştırdıktan sonra resmi tıkladığımızda web sayfası açılacaktır.
HyperLink: Sayfa üzerinde linkler vermeye yarayan kontroldür.
DropDownList: Açılan liste şeklinde seçim yapmak için kullanılır. Birden fazla seçeneğin sadece bir
tanesinin seçilmesi durumunda kullanılır. Örneğin; Web sitelerin “İl ve İlçe” seçimleri gibi işlemlerde
kullanılır.
2
1) File>New>Web Site seçeneğini seçerek yeni bir web sitesi oluşturalım.
2) Web sitemize Image Button ekleyin.
3) Image Button’un Properties’inden “ImageUrl” özelliğinden resim yolunu
gösterin.
17
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
4) Add butonuna basarak DropDownList için elemanlar eklenir. Add dedikten sonra Text ve
Value degerlerini girelim.
5) Text özelliğine yazdığımız değerler DropDownList de ekranda görünecektir.
3
1) Yeni bir Web Sayfası açalım.
2) Toolboxdan çalışma alanına DropDownList ekleyelim.
3) DropDownList’i seçtikden sonra Properties penceresinden Items seçeneğini
tıklayınız. Karşımıza ListItems Collection Editor penceresi açılacaktır.
4
1) Yeni bir Web Sayfası açalım.
2) Toolboxdan çalışma alanına DropDownList ve Label ekleyelim.
3) DropDownList’i seçtikden sonra Properties penceresinden Items seçeneğini
tıklayınız. Karşımıza ListItems Collection Editor penceresi açılacaktır.
4) Add butonuna basarak DropDownList için elemanlar eklenir. Add dedikten sonra
Text ve Value degerlerini girelim.
18
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
5) Daha sonra DropDownList’i çift tıklayarak code‐behind alanına geçelim.
6) DropDownList’in SelectedIndexChanged olayına aşağıdaki kodumuzu yazalım.
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
Label1.Text = DropDownList1.SelectedItem.ToString();
}
Listbox: Tüm özellikleri DropDownList ile aynısıdır. Tek fark karşımıza direk olarak liste şeklinde
gelmesidir. Kodlama olarakda DropDownList de geçerli olan tüm kodlar ListBox içinde geçerlidir.
Kodu çalıştırdığımızda, DropDownList’den seçmemize rağmen TextBox’a değer
aktarılmayacaktır. ASP.Net sayfalarında bu özelliğin algılanması için,
DropDownList1’in properties penceresinde bulunan AutoPostBack özelliğinin True
olması gerekmektedir.
5
1) Yeni bir Web Sayfası açalım.
2) Toolboxdan çalışma alanına ListBox ve Label ekleyelim.
3) ListBox’u seçtikden sonra Properties penceresinden Items seçeneğini tıklayınız.
Karşımıza ListItems Collection Editor penceresi açılacaktır.
4) Add butonuna basarak ListBox için elemanlar eklenir. Add dedikten sonra Text ve
Value degerlerini girelim.
19
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
5) Daha sonra ListBox’u çift tıklayarak code‐behind alanına geçelim.
6) ListBox’un SelectedIndexChanged olayına aşağıdaki kodumuzu yazalım.
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
int deger = Convert.ToInt32(this.ListBox1.SelectedItem.Value);
Label1.Text = string.Format("{0:N} TL", deger);
}
Buradaki string.Format("{0:N} TL",deger) kısmı gönderdiğimiz değeri ayraç olarak ayarlayacaktır.
Checkbox: Genel kullanımı bir formda birden fazla seçim yapmak için kullanılır.
CheckBox nesnemizin ait özellikler aşağıdaki listede yer almaktadır.
20
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
5)CheckBox’larımızın Properties penceresinden Text özelliğini kullanarak değerlerini değiştirelim.
6) DropDownList’e items özelliğinden 4 isim girelim ve AutoPostBack özelliğini True yapalım.
7)Daha sonra DropDownList’i çift tıklayarak kod alanına geçelim. Aşağıdaki kodu ekleyelim.
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.DropDownList1.SelectedIndex == 0)
{
this.CheckBox1.Checked = true;
this.CheckBox2.Checked = true;
this.CheckBox3.Checked = true;
this.CheckBox4.Checked = true;
}
else if (this.DropDownList1.SelectedIndex == 1)
{
this.CheckBox1.Checked = false;
this.CheckBox2.Checked = true;
this.CheckBox3.Checked = true;
this.CheckBox4.Checked = false;
}
else if (this.DropDownList1.SelectedIndex == 2)
{
this.CheckBox1.Checked = false;
this.CheckBox2.Checked = true;
this.CheckBox3.Checked = false;
this.CheckBox4.Checked = false;
}
else
{
this.CheckBox1.Checked = true;
this.CheckBox2.Checked = false;
this.CheckBox3.Checked = false;
this.CheckBox4.Checked = true
}
6
1) Yeni bir Web Sayfası açalım.
2) Toolboxdan çalışma alanına DropDownList ve 4 adet CheckBox ekleyelim.
3) DropDownList’i seçtikden sonra Properties penceresinden Items seçeneğini
tıklayınız. Karşımıza ListItems Collection Editor penceresi açılacaktır.
4) Add butonuna basarak DropDownList için elemanlar eklenir. Add dedikten sonra
Text ve Value degerlerini girelim.
21
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
}
Kodu çalıştırdığımızda DropDownList’den bir isim seçelim. Seçtiğimiz ismin index numarasına göre
CheckBox’lar işaretlenecektir.
RadioButton: CheckBox’a benzer, tek farklılık bir grup ismi verilen radiobutton’lardan sadece bir
tanesini seçme durumumuz olacaktır.
protected void Button1_Click(object sender, EventArgs e)
{
string yazi = this.TextBox1.Text;
if (this.RadioButton1.Checked == true)
{
Response.Write(yazi + " Cinsiyeti: Erkek");
}
else
7
1) Yeni bir Web Sayfası açalım.
2) Toolboxdan çalışma alanına Label, TextBox, 2 adet RadioButton ve Button
ekleyelim.
3) Aşağıda görüldüğü gibi Text değerlerini değiştirelim.
4)Tamam Butonuna çift tıklanarak içine girip aşağıdaki kodu yazalım.
22
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
{
Response.Write(yazi + " Cinsiyeti: Kadın");
}
}
Burada Response.Write komutumuz ekrana yazmak için kullanılır. RadioButton1 eğer işaretlendi ise
TextBoxdaki ismi alarak cinsiyetini ekrana yazacaktır.
Checkboxlist: CheckBox’a benzer bir yapıya sahiptir. Listbox ile CheckBox’ın birleşmesi de denilebilir.
CheckBoxlist’e ait özellikler aşağıdaki listede yer almıştır.
Radiobuttonlist: RadioButton ile ListBox’ın birleşmiş hali diyebiliriz. Items özelliğinden seçenek
ekleyebiliriz. Bu RadioButtonList listesinden sadece bir tane seçebiliriz.
1) Yeni bir Web Sayfası açalım.
2) Toolboxdan RadioButtonList ekleyerek Items özelliğinden sırasıyla Gökhan, Tülay,
Turan isimlerini yazalım.
3) Daha sonra bir buton ekleyerek butonumuzun çift tıklayarak kod alanına geçelim.
23
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
protected void Button1_Click(object sender, EventArgs e)
{
if (this.RadioButtonList1.SelectedIndex == 0)
{
Response.Write(this.RadioButtonList1.SelectedValue + " Bilgi İşlem-
Network");
}
else if (this.RadioButtonList1.SelectedIndex == 1)
{
Response.Write(this.RadioButtonList1.SelectedValue + " Bilgi İşlem-
Web/Grafik");
}
else
{
Response.Write(this.RadioButtonList1.SelectedValue + " Bilgi İşlem-
Yazılım");
}
}
8
24
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Calendar: Ekrana bir takvim getirerek tarih bilgilerini almamızı sağlar. Ayrıca kullanıcıların tarih
formatlarında hata yapmalarını engellemek amaçlı kullanılır.
Calendar nesnemizin özellikleri aşağıdaki listede yer almaktadır.
Calendar nesnemizin üstünden mouse ile sağ tuşa bastığınızda gelen menüden Auto Format seçeneğini
seçiniz. Karşımıza gelen pencereden bize sunulmuş olan biçimlerden birini seçerek OK düğmesine basınız.
25
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
TextBox1.Text = this.Calendar1.SelectedDate.ToShortDateString();
}
Kodumuz yazıp çalıştırdıktan sonra Calendar nesnemizden seçtiğimiz tarihi TextBox’a aktaracaktır.
9
1) Yeni bir Web Sayfası açalım.
2) Toolboxdan Calendar ve TextBox Ekleyelim.
3) Daha sonra Calendar nesnemizi çift tıklayarak kod alanına geçelim ve kodumuzu
yazalım.
26
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Multiview ‐ View: Kullanımı tab menuye benzeyen, oldukça kullanışlı olan Multiview ve View nesneleri
beğeneceğinizi düşünüyorum.
Multiview bilmemiz gerek bir ActiveViewIndex özelliği, hangi View nesnesinin görünmesini istiyorsak onun
index değeriniz yazmamız gerekmektedir. Index numaraları “ 0 “ dan başlamaktadır. Eğer ‐1 değerini
belirlersek ekranda hiçbir View görünmeyecektir.
4) Daha sonra MultiView’in üstüne 3 adet Link Button ekleyerek değerlerini değiştirelim.
5)View1, View2 ve View3 ün içerisine istediğiniz nesneleri ekleyebilir veya yazabilirsiniz.
10
1) Yeni bir Web Sayfası açalım.
2) Toolboxdan bir tane Multiview ekleyeyelim.
3) Daha sonra Multiview’in içerisine 3 adet alt alta View ekleyelim.
27
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
6) Daha sonra LinkButton’larımıza kodlarımızı yazarak çalıştıralım. Böylece hangi linki tıklarsak
ona ait View görünecektir.
protected void LinkButton1_Click(object sender, EventArgs e)
{
this.MultiView1.ActiveViewIndex = 0;
}
protected void LinkButton2_Click(object sender, EventArgs e)
{
this.MultiView1.ActiveViewIndex = 1;
}
protected void LinkButton3_Click(object sender, EventArgs e)
{
this.MultiView1.ActiveViewIndex = 2;
}
28
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Validation
Validation Kontroller
Web sayfalarında en önemli bir konu halini alan bilgi girişi ve bunların kontrollerini yapan kontrollerdir.
Kullanıcıların hatasız ve eksiksiz olarak formların doldurulmasında önemli rol oynamaktadır. Bu kontroller Javascript
veya DHTML kullanılarak da yapılabiliyordu. Fakat Asp.NET 2.0 bize sunmuş olduğu bu validation sayesinde daha
anlaşılır ve hızlı olmamızı sağlamaktadır. Bu kontrollerin çalışması için Internet Explorer 4 ve üstü olması
gerekmektedir. Bu kontrolleri genel olarak tanımlayalım.
Validationları daha iyi anlamak için uygulamalar yapalım.
11
1) Yeni bir Web Sayfası açalım.
2) Toolboxdan TextBox, Button ve RequiredFieldValidator kontrollerini ekleyeyim.
29
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
3) RequiredFieldValidator kontrolünü tıklayalım ve Properties penceresinden ErrorMessage özelliğini kullanarak
hata mesajını “Bu alanı boş geçemezsiniz” olarak değiştirelim. Böylece kullanıcı hata yaptığında bu ileti çıkacaktır.
4) Daha sonra ControlToValidate özelliğinden TextBox1 i seçiniz ve kodumuzu çalıştırınız. Eğer TextBox’ı boş geçerek
butona basarsanız hata çıkacaktır. Fakat TextBox’ımıza birşeyler yazıp butona bastığımızda hata mesajı
kaybolacaktır.
4) Daha sonra yine RangeValidator kontrolünün MinimumValue özelliğine “0”, MaksimumValue özelliğine ise “100”
değerlerini yazınız.
5) Değerleri girdikten sonra CompareToValidate seçeneğinden Textbox objenizi seçiniz. Seçtikten sonra kodumuzu
çalıştıralım ve textbox a “200” gibi büyük bir rakam girelim. RangeValidation hata verecektir. Eğer siz aralık olarak
iki tarih aralığı belirlemek istiyorsanız Range Validation’nın Type özelliğini Date yapmanız gerekmektedir.
12
1) Yeni bir Web Sayfası açalım.
2) Toolboxdan TextBox, Button ve RangeValidator kontrollerini ekleyeyim.
3) RangeValidator kontrolü tıklayarak properties penceresinden ErrorMessage kısmına “0 ile
100 arası bir sayı giriniz” mesajını yazınız.
30
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
4) Properties penceresinde bulunan ValidationExpression seçeneğinin tıkladığınızda karşımıza Regular Expression
Editor penceresi gelecektir. Gelen seçeneklerden telefon numarası, e‐mail, web adresi,posta kodu gibi hazır kalıplar
içermektedir. Biz be seçeneklerden Internet e‐mail address seçeneğini seçiniz.
5)Burada textbox’a bilgi girişi yapıldığında “@” ve “ . ” işaretlerini kontrol edecektir.
Kalıp değerler dışında kendimize göre giriş karakter kontrolü yaptırabiliriz. Regular Expression Editor penceresinde
üstte Custom seçeneğini işaretleyerek Validation expression alana ifadeleri yazınız. Karakterleri aşağıdaki tabloda
inceleyebilirisiniz.
13
1) Yeni bir Web Sayfası açalım.
2) Toolboxdan TextBox, Button ve RegularExpressionValidator kontrollerini ekleyeyim.
3) RegularExpressionValidator kontrolüne ait properties penceresinden ErrorMessage
kısmına “Yanlış E‐Mail” yazısını, ContolToValidate seçeneğinden de TextBox1’i seçiniz.
31
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Bunların dışında sizlere bir kaç regular expressionlar yazılır.
4)Daha sonra kodumuzu çalıştıralım. Textbox1’e ve Textbox2 kontrollerine aynı değerleri yazmamız gerekmektedir.
Buradaki seçeneklerden ControlToCompare seçeneğinde TextBox1’i seçtiğimiz için kontrol bu nesne üzerinden
olmaktadır.
Kontrolleri kullanarak Web formlarımızda kullanıcı hatalarını büyük oranda engelleyerek doğru bilgilerin
gönderilmesini sağlayabiliriz.
14
1) Yeni bir Web Sayfası açalım.
2) Toolboxdan 2 TextBox, Button ve CompareValidator kontrollerini ekleyeyim.
3) CompareValidator kontrolünün properties penceresinde ErrorMessage yazısını “Aynı
Değerler Giriniz” olarak değiştiriniz. Daha sonra ControlToCompare seçeneğinde textbox1’i,
ControlToValidate seçeneğinde ise textbox2’i seçiniz.
32
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
4)Amacımız DropDownList’te seçinlen resim Image İçinde gözükmesidir. DropDownList’in Item değerleri yazılır ve
içine girilerek aşağıdaki kodlar yazılır.
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
if (DropDownList1.SelectedIndex==1)
{
Image1.ImageUrl = "~/1.jpg";
}
else if (DropDownList1.SelectedIndex == 2)
{
Image1.ImageUrl = "~/2.jpg";
}
if (DropDownList1.SelectedIndex == 3)
{
Image1.ImageUrl = "~/3.jpg";
}
if (DropDownList1.SelectedIndex == 4)
{
Image1.ImageUrl = "~/4.jpg";
}
}
15
1)Yeni bir Web Sayfası açalım.
2)Toolboxdan DropDownlist ve Image ekleyelim.
3)Image içine çağıracağımız 4 adet resmi açtığımız web sayfasının bulunduğu klasöre atalım.
16
1)Yeni bir Web Sayfası açalım.
2)Toolboxdan DropDownlist ekleyelim.
33
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
3)Projeye 2 tane Webform ekleyin.( Ekranda sagda solution Explorer penceresinde projenin adresi ve adının yazdıgı
yere sağ click yapıp add new ıtem tıklandıgında açılan pencerede web form tıklandıgında solution Explorer a
eklenmis olucaktır.)
4) DropDownlist’in üstüne double click yapın ve aşağıdaki kodları yazın.
protected void DropDownList1_SelectedIndexChanged1(object sender, EventArgs e)
{
if (DropDownList1.SelectedIndex == 1)
{
Response.Redirect("~/Default2.aspx");
}
else if (DropDownList1.SelectedIndex == 2)
{
Response.Redirect("~/Default3.aspx");
}
}
İşlemler bittikten sonra f5 e basıldıgında sayfa görüntüsü bu şekilde olacaktır ve
DropDownlist ten seçilen sayfa açılıcaktır.
34
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
3) DropDownlist in propertius’unda items özelliğinden gerekli itemlerı ekleyelim.
4) DropDownlist in üstünde çift tıklayalım ve aşağıdaki kodları yazalım.
protected void DropDownList1_SelectedIndexChanged1(object sender, EventArgs e)
{
int sayi1 = Convert.ToInt16(TextBox1.Text);
int sayi2 = Convert.ToInt16(TextBox2.Text);
int sonuc = 0;
if (DropDownList1.SelectedIndex == 1)
{
sonuc = sayi1 + sayi2;
}
else if (DropDownList1.SelectedIndex == 2)
{
sonuc = sayi1 - sayi2;
}
else if (DropDownList1.SelectedIndex == 3)
{
sonuc = sayi1 * sayi2;
}
else if (DropDownList1.SelectedIndex == 4)
{
sonuc = sayi1 / sayi2;
}
Label1.Text = Convert.ToString(sonuc);
}
17
1)Yeni bir Web Sayfası açalım.
2)Toolboxdan DropDownlist , 2 tane TextBox ve Label ekleyin.
35
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Sayfalar Arası Veri Aktarımı
Web sitelerinin çalışma şeklinde Sunucu ve istemci vardır. İstemci sunucudan sayfayı istemektedir. İstemcide
sunucunun göndermiş olduğu sayfa görüntülenmektedir. Burada girilecek veya tanımlanacak bir bilgi istemcide
tanımlanır. Bundan sunucunun haberi olmaz. Bir linke tıklanarak diğer sayfaya geçildiğinde tüm tanımlamalar
istemcide bulunduğu için sunucu, istemcideki tanımlara göre işlem yapamaz. Fakat yapılan tanımlamaların diğer
sayfalara aktarılması ve diğer sayfalarda kullanılması gerekir. Bu işlemi web sitelerinde gerçekleştirmek için değişik
yöntemler kullanılmaktadır.
1- Web sayfasındaki formu Post metodu ile diğer sayfaya göndermek ve Request.Form ile değerleri almak.
2- Web sayfalarını çağırırken adres satırında parametre gönderme, RequestQuerystring kullanma.
3- Cokie kullanma
4- Application nesnesinde değişken tanımlama
5- Session nesnesinde değişken tanımlama
Web ortamında sayfaların her post-back olmasında ilgili sayfanın yeni bir örneği oluşturulur. Peki, yeni bir örneğinin
oluşması ne demek?
1.Sayfamızdaki bilgilerin
2.Sayfadaki kontrollerin (TextBox, Grid, CheckBox, Button vb.)
tamamen kaybolması demektir. Örneğin kullanıcı sayfamızdaki bir TextBox’a veri girdiğinde, artık biliyoruz ki bu veri
tamamen kaybolacaktır. Ancak bunu deneyip yaptığımızda gerçek ortamda TextBox’taki verinin kaybolmadığını
görüyoruz.
Peki, bu nasıl oluyor?
Geleneksel Web Programlamanın bu sınırlılığının üstesinden gelmek için .NET platformu bize bazı sayfa-tabanlı ve
uygulama-tabanlı seçenekleri sunmakta. Bunlar:
1.View State
2.Control State
3.Hidden Fields
4.Cookies
5.Query Strings
6.Application State
7.Session State
Bu seçeneklerden (View State, Control State, Hidden Fields, Cookies ve Query Strings) sayfamızdaki bilgileri ve
kontrol bilgileri bir takım yollarla kullanıcının kendi bilgisayarında (Client-Based State Manegement) saklarlar. Geri
kalan seçenekler ise (Application State, Session State ve Profile Property) bu bilgileri uygulama tarafında yani
sunucuda (Server-Based State Management) saklarlar.
.NET platformunun bizlere sunduğu bu seçenekleri incelersek:
36
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
View State
Post-Back sırasında default olarak sayfa ve kontrol bilgilerini tutan bu yapı, dictionary mantığıyla çalışır. Her bir
kontrolün ve sayfa bilgisinin değerleri “Key”, “Value” şeklinde, hidden field’lar olarak korunur. Sayfa sunucuya
gönderildiğinde, gelen isteğe göre işlem yapıldıktan sonra sunucu view-state değerine göre sayfayı tekrardan render
eder ve client’a tekrar gönderir. Böylece sayfamızdaki verilerimizi kaybetmemiş ve sunucuya gitmeden önceki
halleriyle tekrar tarayıcımızda görürüz.
View state yapısında kendi verilerimizi de saklayabiliriz. Dictionary mantığıyla çalıştığını daha önce belirtmiştik.
Aşağıdaki gibi basit bir şekilde View State yapısını kullanabilirsiniz
View State e veri ekleme:
ViewState.Add(”[Key]“,”[Value]“);
Eklenen bir veriyi alma:
ViewState["[Key]“].ToString();
Bu yöntemi kullanmanın avantajları:
1.Sunucu kaynaklarını yormaz: Client-Based olduğu için sunucumuza artı bir yük getirmez
2.Kolay uygulanabilirlik: Ekstra kodlama gerektirmez. Zaten default olarak kullanılan metoddur
3.Güvenlik: View-State değerleri şifrelenmiş bir şekilde saklandıkları için Hidden field’lara göre daha güvenlidirler
Dezavantajları:
1.Performans düşüklüğü: View-State değerleri sayfamızla beraber sunucuya gittiği için view-state de büyük boyutta
veri saklamak sunucuya gidiş-geliş süresini uzatacaktır. özellikle mobil uygulamalarda büyük veriler büyük
performans kaybı demektir.
2.Potansiyel Güvenlik Riski: Veriler şifrelenmiş bir şekilde saklansa bile sayfa kaynağını görüntülediğimizde bu
verileri şifreli halde bile olsa görebiliriz. Bu durum güvenlik riski oluşturabilir.
Control State
.NET ControlState özelliği post-back’ler arasında custom kontrol verilerini tutmamıza olanak sağlar. Örneğin
sayfamızda farklı içerikler gösteren farklı tab yapılarımızın olduğunu düşünün. Hangi tabın seçili olduğunu post-back
işleminden önce bilmek istiyorsak bu yapı uygun bir yapıdır. Bu senaryo ViewState ile de yapılabilir, ancak
ViewState sayfa bazında kapatılabildiği için uygulamamızda aksaklıklara neden olabilir. ControlState ise ViewState
gibi kapatılamaz.
peki nasıl kullanılır?
Veri ekleme:
PageStatePersister.ControlState = “[Data]”;
Veri alma:
string value = PageStatePersister.ControlState.ToString();
Kullanım Avantajları:
1.Sunucu kaynaklarını yormaz: Client-Based olduğu için sunucumuza artı bir yük getirmez
37
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
2.Güvenilirlik: ViewState gibi kapatılamadığından kullanımı daha kesin sonuçlar verir.
3.Çok Yönlülük: Control state tekli verilerin nasıl ve nerede saklanması konusunda custom adaptörler yazılabilir
Dezavantajları:
1.Programlama bilgisi gerektirir: ASP.NET kullanım için limitli imkan sağlasa da, tam kullanım için kodlama
gerektirmektedir.
Hidden Fields
Hemen hemen hepimizin bildiği bir state yönetim aracıdır. Normal bir HTML kontrolü olarak sayfamıza
ekleyebilirsiniz. Veri saklama ve veri alma, normal bir TextBox’tan farksızdır.
Kullanım avantajları:
1.Sunucu kaynaklarını yormaz: Client-Based olduğu için sunucumuza artı bir yük getirmez
2.Yaygın Destek: Hemen hemen tüm tarayıcılar hidden field desteği vermektedir.
3.Kullanım kolaylığı: Standart HTML kontrolü olarak sayfanıza ekleyebilirsiniz.
Dezavantajları:
1.Güvenlik Riski: Sayfa kaynağı direkt olarak görüntülenirse hidden field değerleri açıkça görülebilir. Değerler
şifrelenebilir ancak şifrelenmesi ve şifrelerin tekrar çözülmesi işlemi ekstra kodlama demektir.
2.Basit Depolama Mantığı: Hidden field’larda rich değerler saklayamayız. Daha çok basit veriler saklanması için
tasarlanmıştır.
3.Performans Kaybı: Büyük veriler saklayamadığımız gibi, aşırı kullanımı durumunda sayfada HTML kontrolü olarak
saklandığı için performans kayıplarına neden olacaktır
Cookies (Çerezler)
//myCookie isminde yeni nesne oluştur
HttpCookie MyCookie = new HttpCookie("SonZiyaret");
//now isminde datetime tipinde nesne oluşturup o anki zaman aktar
DateTime now = DateTime.Now;
//myCookie’nin değeri belirleniyor
MyCookie.Value = now.ToString();
//myCookie’nin süresi belirleniyor. Ömrü 1 saat olarak ayarlanıyor
MyCookie.Expires = now.AddHours(1);
//myCookie istemci bilgisayara ekleniyor.
Response.Cookies.Add(MyCookie);
Cookie Okuma
HttpCookie myCookie = Request.Cookies.Get("SonZiyaret");
degisken = myCookie.Value;
38
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Kullanım Avantajları:
1.Konfigüre Edilebilme: Cookie’lerin ayarlanabilir birçok özelliği vardır. İsim, değer, zaman aşımı süresi vb.
2.Sunucu kaynaklarını yormaz: Client-Based olduğu için sunucumuza artı bir yük getirmez
3.Veri Devamlılığı: Client bilgisayarlarda veri bütünlülüğünü en yüksek oranda garanti edebilen yapılardır.
4.Kullanım kolaylığı: text tabanlı key-value mantığıyla çalışırlar
Dezavantajları:
1.Boyut limiti: Bir çok browser cookie boyutu olarak 4096 byte sınırını getirmektedir.
2.Kullanıcı Kontrolü: Bazı kullanıcılar cookie alımını tarayıcılarından kapatabilirler, bu da cookie kullanımını olanaksız
hale getirir
3.Güvenlik Riski: Cookie kullanıcılar tarafından görülebilmektedir. Bu da güvenlik açıklarına neden olabilir. Cookie
değerleri manuel olarak şifrelenebilir, ancak bu da ekstra kod demektir.
protected void Button1_Click(object sender, EventArgs e)
{
HttpCookie cerez = new HttpCookie("KullaniciBilgileri");
cerez["KullaniciAdi"] = "msabrikunt";
cerez["Sifre"] = "123456";
cerez["Gecerlilik"] = "5 Gün";
cerez.Expires = DateTime.Now.AddDays(5);
Response.Cookies.Add(cerez);
}
17
1)Yeni bir Web Sayfası açalım.
2)Toolboxdan Button ekleyelim.
3)Button’un Click olayına aşağıdaki kodu yazalım.
39
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Çerez Kaydet İçine şu kodları yazalım.
protected void Button1_Click(object sender, EventArgs e)
{
// Cookie oluştur.
HttpCookie cookie_isim = new HttpCookie("Uygulama");
// Formdan Gelen Bilgileri Anahtarlara Yaz.
cookie_isim["kullanici_adi"] = TextBox1.Text;
cookie_isim["sifre"]=TextBox2.Text;
// Cookienin Bitiş Süresi.
18
1)Yeni bir Web Sayfası açalım.
2)Toolboxdan 2 Button, 6 Label, 2 TextBox ekleyelim.
3)Button’un Click olayına aşağıdaki kodu yazalım.
40
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
cookie_isim.Expires=DateTime.Now.AddHours(1);
// Cookieyi Kaydet.
Response.Cookies.Add(cookie_isim);
}
Çerez Oku İçine şu kodları yazalım.
protected void Button2_Click(object sender, EventArgs e)
{
// Cookieyi Al.
HttpCookie cookie_isim = Request.Cookies["Uygulama"];
//Cookiedeki Değerlerle Formu Doldur.
Label5.Text = cookie_isim["kullanici_adi"];
Label6.Text = cookie_isim["sifre"];
}
Sayfayı kapatıp açtığımızda da Çerez okuyu tıklasak yine o değerleri okuruz. Çünkü çerez ömrü 1 saat verilmiş.
QueryStrings
QueryString’lerde yine en çok aşina olduğumuz state yönetim araçlarındandır. URL’lerin ardına eklenen kullanıcılar
için çok da bir anlam ifade etmeyen, yazılımcılar için anlamlı bilgilerdir.
Örneğin:
xyz/index.php?option=com_comprofiler&task=userProfile&user=142
adresindeki “?” işaretinden sonra gelen “option”, “task” ve “user” kelimeleri birer Query String anahtarlarıdır. Bu
anahtarlar kullanıcılar için fazla bir anlam ifade etmez ancak yazılımcılar için çok anlamlıdırlar.
Kullanımı:
41
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
xyzindex.php?option=com_comprofiler
Her iki kullanımda aynı işi görmektedir.
Veri Alma:
if (Request["[Key]“] != null)
{
string value = Request["[Key]“].ToString();
}
Kullanım Avantajları:
1. Sunucu kaynaklarını yormaz: Client-Based olduğu için sunucumuza artı bir yük getirmez
2. Yaygın Destek: Hemen hemen tüm tarayıcıların Query String iler veri taşıma desteği vardır.
Dezavantajları:
1. Güvenlik Riski: Query String ile taşınan veriler clear text olarak tüm kullanıcılar tarafından görülebilmektedir. Bu
nedenle değerli veriler kesinlikle querystring ile taşınmamalıdır. Bunun yerine Hidden field veya diğer yapılar
kullanılabilir.
2. Kapasite Limiti: Bazı tarayıcılar URL uzunluklarını en fazla 2083 karakter olarak sınırladıklarından istenilen
uzunlukta veri taşınamıyor.
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("default2.aspx?AD=Gokhan&SOYAD=TURAN");
}
19
1)Yeni bir Web Sayfası açalım. İki adet sayfamız olsun. (Default,Default2)
2)Toolboxdan birinci sayfaya 1 Button ekleyeyim.
3)Button’un Click olayına aşağıdaki kodu yazalım.
42
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Default2.aspx sayfasına 1 adet Label ekleyerek aşağıdaki kodu ekleyelim.
protected void Page_Load(object sender, EventArgs e)
{
string isim = Request.QueryString["AD"];
string soyisim = Request.QueryString["SOYAD"];
Label1.Text = isim + soyisim;
}
Application/Uygulama
Asp'yi yazanlar ASP teknolojisinin kullanıldığı bir siteyi uygulama programı olarak düşünmüşler ve bu siteye girecek
herhangi biri ziyaretçiyi de bu programı kullanan bir kullanıcı olarak düşünmüşler. Yani sitenize her bir kullanıcı
girdiğinde bir onun için bir program açılıyor gibi düşünülebilir.
Web sitemiz sunucuya yüklendiğinde bir Application (uygulama) çalışır. Web sunucu kapatılana kadar bu uygulama
çalışır. Bu uygulama kapatılana kadar değişkenler saklanmaktarı. Sunucu taraflı veri saklama yöntemidir.
ASP.NET’te Application nesnesinde tanımlanan bir değişkeni ve değerini tüm ziyaretçiler görür. Application’da
tanımlanan değişkenin ömrü, Web sunucunun çalışma süresi kadardır. Web sunucu durduğunda Application
değişkenleri silinir.
Application değişken tanımlama
Application.Add("Okul", TextBox1.Text);
Application değişken değerlerini okuma
degisken = Application["Okul"].ToString();
43
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Session/Oturum
Bu nesne Application nesnesi ile en çok karıştırılan nesnedir. Çünkü ikisi de tanımlamalarda aynı özellikleri taşır.
Session Oturum demektir. Web Sitesine her bağlanan kişi için Application’da bir oturum oluşturulur. Session belirli
bir süre için oluşturulur. Bu süre varsayılan olarak 20 dakikadır. Her istemci için ayrı ayrı oluşturulan session o
istemci bağlantısını kesene kadar veya session ile ilgili hiçbir işlem yapmadan 20 dakika geçtiğinde hafızadan silinir.
Dolayısıyla session’da tanımlanan bir değişkene sadece o oturumu başlatan kişi oturum açık kaldığı sürece ulaşabilir.
Session sunucu taraflı çalışan bir sistemdir. Bu nedenle değişkenler sunucuda saklanır.
Session’da değişken oluşturma:
Session.Add("Yetki", 3);
Oluşan oturumda (Session) Yetki isminde bir değişken oluşturulur ve 3 değeri bu değişkene aktarılır. Daha sonra
web sitemizin herhangi bir sayfasında bu değeri okuyabiliriz.
degisken = Session["Yetki"];
Session süresinin belirlenmesi
Session nesnesi varsayılan olarak 20 dakika için oluşturur. İstemci web sitesinden istekte bulunmaya devam ettiği
sürece oturum kapatılmaz. Eğer istemci 20 dakika herhangi bir işlem yapmaz ise oturum kapatılır. Oturumun sona
ereceği süre aşağıdaki örnekteki gibi dakika cinsinden verilebilir.
Session.Timeout = 30;
Tüm session nesnelerinin değerini sıfırlama
Sitemizde öyle bir an olur ki session nesnelerine yüklediğimiz tüm verileri bir defada silmek isteyebiliriz.
Session.Abandon();
protected void Page_Load(object sender, EventArgs e)
{
string sayfa_id = Request.QueryString["sayfa"];
if (Session[sayfa_id] == null)
{
Label1.Text = "Sayfayı ilk kez okuyorsunuz.";
Session[sayfa_id] = "okundu";
}
else
{
20
1)Yeni bir Web Sayfası açalım.
2)Toolboxdan sayfaya 1 Label ekleyeyim.
3)Sayfanın Load olayına aşağıdaki kodu yazalım.
44
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Label1.Text = "Daha önce bu sayfayı okumuşsunuz.";
}
}
F5 ile sayfanın ön izlemesini görelim. Karşımıza aşağıdaki sayfa gelecektir.
Bu sayfada iken Sayfayı güncelleyelim. (F5 ile) Aşağıdaki pencere karşımıza gelecektir.
ASP.NET Kavramlar
Request/Talep
Adından anlaşabileceği gibi veri talep etmek için kullanılır. Gerek formlarda, gerek sorgulardan gerekse
cookie’lerden verileri almak için kullanırız.
Kısaca İstemciden veri almak için kullanılır.
Bu nesne ile kullanıcıdan birçok şekillerde veri alabiliriz. Tabi bunun için Request nesnesinin metotlarını
kullanacağız. Şimdi bunları görelim.
1. Request.Form: Kullanıcının doldurduğu herhangi bir form öğesinden veri almak için kullanılır. Aldığınız bu veriyi
sayfanızda herhangi bir yerde kullanabilirsiniz.
Degisken = Request.Form("form_oge_adi");
şeklinde veriyi alabilir ve bir değişkene atayabilirsiniz.
Not: Yukarıdaki örnekte bulunan form_oge_adi denen isim formdaki öğenin adıdır.
2. Request.QueryString: sayfa.aspx?degisken=deger gibi bir url’deki değişken adlı değişkenin değerini almada
kullanılır.
Degisken = Request.QueryString("degisken_adi");
şeklinde veriyi alabilir ve Request.Form'daki gibi bir değişkene atanabilir.
Eğer birden fazla değişken url ile yollanacak ise sayfa.asp?degisken1=deger&degisken2=deger şeklinde yollanıp
yukarıdaki gibi alınabilir.
3. Request.ServerVariables: Server değişkenlerinden veri alma. Hep kullanıcıdan değil de bazen sunucudan veri
almamız gerekir, mesela o sırada çalışan asp sayfasının adresini buradan alabilirsiniz.
Request.ServerVariables("degisken_adi")
şeklinde bir kod ile değeri alabilirsiniz ve bir değişkene yükleyebilirsiniz. degisken_adi adlı bölümde aşağıdaki
değerler kullanılabilir.
45
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Değişken Açıklamalar
ALL_HTTP İstemci tarafından gönderilen http Header altında yer alan tüm değişkenler ve değerlerini
getirir.
ALL_RAW http Header altında yer alan tüm değişkenler ve değerlerini getirir. Başlarında http öneki
olmaz.
APPL_MD_PATH Uygulamanın Metabase yolunu verir
APPL_PHYSICAL_PATH Uygulamanın fiziksel yolunu verir
AUTH_PASSWORD Kullanıcı sunucuya basit yetkilendirmeyle bağlanıyorsa parolayı getirir.
Bu değişken yalnızca Temel kimlik doğrulama kullanılır kullanılabilir.
AUTH_TYPE Auth_type Yetkilendirme metodunu getirir.
AUTH_USER Kullanıcı sunucuya basit yetkilendirmeyle bağlanıyorsa adını getirir.
CACHE_URL ISAPI uygulamalarda kullanmak için.
CERT_COOKIE Bağlantıda yetkilendirme sertifikası kullanıyorsa kendisine verilen kimlik.
CERT_FLAGS Kullanıcının sertifikası varsa bu değer 1 olur.
CERT_ISSUER sertifikası varsa veren kurum(O = MS, OU = IAS, CN = kullanıcı adı, C = USA).
CERT_KEYSIZE Güvenli Yuva Katmanı (SSL) içinde bit sayısı bağlantı anahtar boyutu.
Örneğin, 128.
CERT_SECRETKEYSIZE SSL’deki deki özel anahtarın bit sayısı. Örneğin, 1024.
CERT_SERIALNUMBER Istemci sertifikası seri numarası
CERT_SERVER_ISSUER Sunucu sertifikasının alındığı yer
CERT_SERVER_SUBJECT Sunucu sertifikasının Konu alanı.
CERT_SUBJECT Istemci sertifikanın Konu alanı.
CONTENT_LENGTH Müşteri tarafından verilen içerik boyutu.
CONTENT_TYPE Içerik veri türü.
Gelen bilgilerin GET veya POST metoduna göre türünü gösterir.
GATEWAY_INTERFACE Sunucunun kullandığı CGI tipi ve sürümü.
HEADER_ <HeaderName> Değeri başlık <HeaderName> saklanır.
Herhangi bir başlık bu tabloda listelenen başka ServerVariables koleksiyonu için sırayla
"HEADER_" tarafından değeri önünde olmalıdır.
HTTP_ <HeaderName> Değeri başlık <HeaderName> saklanır.
Herhangi bir başlık bu bu tabloda listelenen başka ServerVariables koleksiyonu için sırayla
"HTTP_" tarafından değeri önünde olmalıdır.
46
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
HTTP_ACCEPT Kabul biçimlerinin bir listesini içerir Kabul başlığı döndürür.
HTTP_ACCEPT_ENCODING Kabul kodlama türleri döndürür.
HTTP_ACCEPT_LANGUAGE Bir dize içeriğinin görüntülenmesi için kullanılacak dil.
HTTP_CONNECTION Bir dizenin bağlantı türü.
HTTP_COOKIE Bu sitenin içerdiği İade çerez.
HTTP_HOST Web sunucusunun adını verir
HTTP_REFERER geçerli sayfayı bir HTML <a> etiketi kullanarak Döndürür
HTTP_URL URL’nin kodlanmış şeklini verir, örneğin, "/ vdir / default.asp? QueryString".
HTTP_VERSION Adı ve istek SERVER_PROTOCOL protokolü üzerinden (ham formu) sürümü.
HTTPS Ziyaretçi ile bağlantının güvenli olup olmadığını gösterir.
HTTPS_KEYSIZE SSL bağlantısı içinde bit sayısı Örneğin, 128.
HTTPS_SECRETKEYSIZE Sunucu sertifikası private key deki bit sayısı. Örneğin, 1024.
HTTPS_SERVER_ISSUER Sunucu sertifikasının Issuer alan.
HTTPS_SERVER_SUBJECT Sunucu sertifikasının Konu alanı.
INSTANCE_ID Sunucunun aynı andaki çalışma sayısı.
INSTANCE_META_PATH Sunucunun çalıştığı meta yolu.
LOCAL_ADDR İstemcinin IP numarası.
LOGON_USER İstemcinin kendi sistemindeki oturum açma adı.
PATH_INFO Çalışan sayfanın yolu veya adı.
PATH_TRANSLATED Çalışan sayfanın uzun yolu veya adı.
QUERY_STRING Adres satırında Query string kısmını verir
REMOTE_ADDR Bu istemcinin IP adresini verir.
REMOTE_HOST Bu istemcinin bilgisayarın adını verir
REMOTE_PORT TCP bağlantısının istemci bağlantı noktası numarası.
REMOTE_USER İstemcinin gerçek adı.
REQUEST_METHOD Verilerin elde edildiği metot.
SCRIPT_NAME ASPX sayfasının URL’deki adı.
SERVER_NAME Sunucunun ana bilgisayar adı.
SERVER_PORT İstekte bulunurken kullanılan port numarası.
47
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
SERVER_PORT_SECURE Portun güvenliliğini gösterir. Güvenli ise 1 değilse 0.
SERVER_PROTOCOL Sunucudaki http’nin sürümü.
SERVER_SOFTWARE Web sunucusun adı ve sürümü.
URL Aktif olan URL’yi gösterir.
Response/Karşılık
Ziyaretçinin browser’ına gönderilen verilerin hepsini kapsar. Ayrıca cookie’lerde Response öğesinin özellikleri
arasında yer alır.
Kısaca bu nesne ile istemciye veri yollarız.
Response nesnesini en çok ziyaretçinin tarayıcısına bir şey yazdırmak için kullanırız. Tabii sadece bu değil bu nesne
ile web sayfamızın birçok özelliğini belirleriz.
Response nesnesini sadece bu haliyle kullanmayız bu nesneyi de birçok ASP kodunda olduğu gibi "." yazıp sonra
özelliğini yazarız. Şimdi bunların neler olduğunu ve ne işe yaradığını görelim.
Write (Yazdır): Response nesnesinin en çok kullandığımız özelliğidir. Bu kodu ziyaretçinin ekranına bir şeyler
yazdırmakta kullanırız.
Response.Write("Yazı yazdırıyoruz");
Buffer (Tampon): Bu özellik "TRUE" olarak ayarlandığında asp sayfasının tüm kodlarının yorumlanması bitmeden
tarayıcıya çıktı yollanmasını engeller. Bu sayede çok işlem gerektiren sayfalar bu yöntem ile tamamen yorumlanınca
çıktısı tarayıcıya yollanır. Veya sizin asp sayfanız yorumlanması bitince ziyaretçiyi başka bir siteye yolluyor bunun
için tüm kodların önce yorumlanması gerekir o zamanda bu özellik işinize yarayacak.
Response.Buffer = true;
Flush (Hemen Gönder) : Kısaca Buffer özelliğinin tam tersi bir işlem yapar. Sayfa yorumlandıkça çıktı tarayıcıya
yollanır.
Response.Flush
Clear (Temizle) : Buffer özelliğini kullandığınız zaman sayfa yorumlanır, yorumlanan kısım geçici bir alanda tutulur.
Clear özelliği ile de bu alandaki tüm veri silinir. Ama bu özellik neden işimize yarayabilir? Sitemizde alışveriş yapan
bir kullanıcı, vazgeçtiği zaman verdiği bütün bilgileri silmek en iyisidir. O zamanda bu özellik yardımımıza koşacaktır
Response.Clear();
Expires (Süresi Geçme): Bir internet sitesine girdiğiniz zaman tarayıcımız bu sitedeki resimleri ve kodları cache
denen (bilgisayarımızdaki Temporary Internet Files klasörü) bir alanda tutar. Böylece daha sonra siz bu siteye tekrar
girmek istediğinizde tarayıcı sayfayı buradan yükler. Ama kullanıcılar gidip buradan sayfanızın kodlarını görebilir ve
bizim asp sayfamızda önemli kodlar olabilir veya bazı şifreler bu sayfada tutuluyor olabilir, o zaman bu sayfanın
cache'e alınması pekiyi olmaz. Veya sitemiz çok sık yenileniyor ise kullanıcı eski halini görüyor olacak. Bunun için biz
bu özelliği kullanarak sayfamızın cache'te ne kadar tutulacağını belirleyebiliriz.
Response.Expires=10;
Buradaki 10 dakika olacaktır. Bu sayıyı 0 yaparsanız hiç cache'e alınmaz.
48
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
End (Son): Sayfamızda belli durumlar sonucunda kullanıcıya karşılık vermemesini (yani küsmesini ) sağlayabiliriz. Bu
durumda o ana kadar yorumlanan bütün kodlar tarayıcıya ulaşır ve ondan sonraki hiçbir kod yorumlanmaz, buna
HTML de dâhil. Ayrıca bu özellik ile Buffer özelliğiyle geçici alanda tutulan tüm veri ziyaretçinin tarayıcısı ile buluşur.
Response.End
MasterPage
Normal web formuna benzer. Kodlaması ile tamamen aspx sayfalarda yaptığımız işlemleri yapabiliriz. Direk
çalıştırmak dışında aspx de yaptığımız tasarımları da yapabiliriz. Master page’i anlamak için söyle anlatılabilir. Bir
web sayfamız var ve sitemizin sol menü, üst banner gibi sayfanın belli kalıpları sabittir. Bu sabitleri bir kere
tasarlayarak ya da kodlayarak tüm sayfalarda kullanmamızı sağlayacaktır. Öncelikte masterpage’i tasarlayıp daha
sonrasında kodlamaya geçmek daha uygun olacaktır. Masterpage oluşturmak için Web Site > Add New Item
seçeneğinden Masterpage eklenebilir.
Dosyamızın uzantısı master türündedir. Master pagede düzenleme yaparken sizlere tavsiyem table objelerinin
içerisinde çalışmaktır. Böylece sayfada kayma ya da biçim bozukluğu olmayacaktır. Tabloların içerisine
ContentPlaceHolder nesnesi eklememiz gerekmektedir. Öncelikle işlemlerin düzgün olması için bir tasarım
yapılması gerekmektedir. Masterpage sayfasını açtığımızda design kısmında bir tane ContentPlaceHolder gelmiş
olacaktır. Biz baksa bir tane eklemek istediğimizde ContentPlaceHolder’ı Toolbox penceresinden tasarım alanına
sürüklemeniz yeterli olacaktır.
49
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Tablo oluşturduktan sonra ContentPlaceHolder’ları tablonun içerisine sürüklememiz yeterli olacaktır.
3) Masterpage’i yaptıkdan sonra buna bağlı sayfalar yapmak için Solution Explorerda Ana.Master dosyamızı sağ
tıklayalı, gelen menüden Add Content Page seçeneğini seçelim.
21
1)Yeni bir Web Sayfası açalım. Bir adet de Master Page ekleyip adını “Ana” koyalım.
2) MasterPage içerisine tasarım için gerekli tablo düzeneğini oluşturalım.
50
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
4) Add Content Page seçeneğini tıkladığınızda otomatik olarak bir web sayfası oluşacaktır. Oluşturduğumuz web
sayfasının Design kısmına geçtiğimizde Ana.Master sayfasının kalıbının geldiği göreceksiniz.
Bu şekilde sayfalar üreterek ana kalıp üzerinden sayfalar yapabiliriz.
Web User Control
Web User Controlleri bir nevi diğer web programlama dillerindeki include dosyalar gibi düşünebilirsiniz.
Oluşturduğunuz bir Web User Controlü sayfanızın isteğiniz yerine koyar ve orada onun görünmesini
sağlayabilirsiniz. Oluşturulan bir web user control birçok defa aynı veya farklı sayfalarda kullanılabilir.
51
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Özellikleri
Web user controller proje içerisinde oluşturulan ascx uzantılı dosyalardır. Bu dosyalar içerisinde daha önceden var
olan HTML ve server componentlerini istediğimiz gibi kullanarak yeni bir görünüm oluştururuz. User Controller
VS.NET toolbox’ında yani araç çubuğunda bulunmazlar. Onları herhangi bir projeye eklemek için Solution
Explorer’dan o ascx uzantılı dosyayı tutarak sayfada istenilen yere bırakılması yeterlidir. Web User Controller,
.NET’in diğer kontrollerine benzemez.
Aslında Masterpage çıkmadan önce kullanılan bir teknik olarak nitelendirebiliriz. User Controller masterpageden
biraz farklı çalışırlar MasterPage de sayfa teması hazırlarken User Controller tek amacı yazıp sayfaya yerleştirmek
için kullanılır. Yine bir sol menu düşünelim. Sol menüyü user control olarak yaptığımızda her sayfaya (aspx) tek tek
taşımamız gerekmektedir.
3) Web User Control dosyamızın uzatısı ascx olarak tanımlanır. Normal web sayfaların farklı yoktur. Tasarım ve
kodlamalar aynen Web User Controldede yapılabilir. Tek farklılık ascx dosyalar tek olarak çalıştırılamaması.
Projemize eklemiş olduğumuz WebUserControl.ascx dosyamızı açalım ve içerisine bilgiler girelim.
22
1)Yeni bir Web Sayfası açalım. Add New Item seçeneğinden ek olarak 2 sayfa daha
ekleyelim. Böylece projemizde Default.aspx, Default2.aspx, Default3.aspx adından toplam 3
tane sayfamız olacaktır.
2) Bunlara ek olarak Add New Item’dan Web User Control ekleyelim.
52
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
4) Oluşturduğumuz Web User Control artık tüm sayfalarımızda çalışabilir. Bunu için Default.aspx, Default2.aspx,
Default3.aspx dosyalarına webusercontrol.ascx dosyasını sürükleyiniz.
5) Artık tüm sayfalarımızda menümüzü kullanabiliriz. Web User Controlde yaptığımız tüm değişikliklerde diğer
sayfalarda etkilenecektir.
CLASS, VERİTABANI ve ÜYELİK SİSTEMİ
Class: Bir projede birden fazla yerde kullanılacak kodu her seferinde yazmaktansa tek bir yerde yazıp diğer yerlerde
de kullanma işine denir.
Veritabanı: Bilgisayar ortamında saklanan düzenli verilerdir.
Ado.Net
Web üzerinden veritabanına bağlanmak ve veri işlemleri gerçekleştirmek için ADO.NET teknolojinden faydalanarak
işlemlerimizi gerçekleştireceğiz. ADO.NET her ne kadar ADO teknolojine benzese de aslında çok fazla ilgisi yoktur.
ADO.NET (Activex Data Objet) tamamıyla yeniden geliştirilen yapısı ile verilere ulaşır. ADO.NET verilere erişirken
ADO gibi sadece OLEDB Provider değil, onun dışında SQL Provider yapısını da kullanır.
ADO.NET veri geçişlerinde XML yapısına tam uyumlu olduğundan sağlam ve performansı yüksek her ortama
uyumludur. .NET Platformunu yüklediğimizde sahip olduğumuz Providerlar Odbc, Oledb, SqlClient gelmektedir.
Fakat Oracle veritabanınıza bağlanmak istiyorsanız www.oracle.com adresinden OPD.NET’i indirmeniz
gerekmektedir.
53
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
3) WebSite11’e sağ tıklayıp açılan pencereden New Folder menüsüne tıklayalım. Klasör adına Kontrol adı verelim.
4)Kontrol klasörüne sağ tıklayarak Add New Item diyelim.
5)Web User Control seçerek adına Uye yazalım ve Add butonuna tıklayalım.
23
1)Yeni bir Web Sayfası açalım.
2)Access’te bir veri tabanı oluşturulup “App_Data” klasörünün içine “vt.mdb” şeklinde
atalım. Sebebi ise class içinde veri tabanı adresini ana dizinde App_Data klasöründe vt.mdb
seklinde tanımlama yapacağız.
54
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
5) Aşağıda görüldüğü gibi Uye.ascx Kontrol klasörü altına eklenmiş oldu. Şimdi Uye.ascx’e geçilerek aşağıdaki
işlemler yapılır.
Bir adet “MultiView” ekliyoruz. İçine tıklayıp ” view” ekliyoruz hiçbir yere tıklamadan bir tane daha ekliyoruz.
Multiview’in ActiveViewIndex özelliğini “0” yapıyoruz ve View1’de işlemleri yapmaya başlıyoruz.
İlk olarak bir Label ekliyoruz ve Text özelliğinin içini boşaltıyoruz. Ardında bir alt satıra geçip “Kullanıcı Adı:”
yazıyoruz ve yanına bir adet Textbox ekliyoruz. Bir satır daha indikten sonra “Şifre:” yazıyoruz ve yanına bir Textbox
daha ekliyoruz. Bu TextBoxs’un TextMode özelliğini Password yapıyoruz. Sonra alt satıra ise bir buton koyup Text
özelliğine Giriş yazıyoruz. Bir alt satıra ise bir Link Button koyuyoruz ve Text özelliğine Yeni Kayıt yazıyoruz.
55
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
View2’de ise ilk başta “Hoş Geldiniz” yazıp yanına “Label” koyuyoruz. Bir alt satıra geçerek bir LinkButton ekleyerek
Text özelliğine “Cıkış” yazıyoruz.
6)Şimdi de bir veri tabanı oluşturalım. Adı “vt.mdb” oldun. İçindeki tablo adı ise “Uye” olsun. Tablo içindeki alan
adları ise aşağıdaki resimdeki görülen değerler olsun. Veritabanını en son “App_Data” içine atalım.
Sıra geldi kodlamaya.
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.OleDb;
public partial class Kontrol_Uye : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["ID"] != null)
{
MultiView1.ActiveViewIndex = 1;
56
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
OleDbConnection bag = new
OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;data source=" +
Server.MapPath("~/App_Data/vt.mdb"));
bag.Open();
OleDbDataAdapter da = new OleDbDataAdapter("select * from Uye where ID= "
+ Session["ID"].ToString(), bag);
DataTable dt = new DataTable();
da.Fill(dt);
bag.Close();
Label2.Text = dt.Rows[0]["Ad"].ToString() + " " +
dt.Rows[0]["Soyad"].ToString();
}
else
{
MultiView1.ActiveViewIndex = 0;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
OleDbConnection bag = new
OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;data source=" +
Server.MapPath("~/App_Data/vt.mdb"));
bag.Open();
OleDbDataAdapter da = new OleDbDataAdapter("select * from Uye where
KullaniciAdi='"
+ TextBox1.Text + "'and Sifre='" + TextBox2.Text + "'", bag);
DataTable dt = new DataTable();
da.Fill(dt);
bag.Close();
if (dt.Rows.Count == 0)
{
TextBox1.Text = "";
TextBox2.Text = "";
Label1.Text = "Hatalı Giriş";
}
else
{
Session.Add("ID", dt.Rows[0]["ID"]);
Session.Add("Yetki", dt.Rows[0]["Yetki"]);
Response.Redirect("Default.aspx");
}
}
protected void LinkButton2_Click(object sender, EventArgs e)
{
Session.Abandon();
Response.Redirect("?");
}
}
Kod yazma işlemi bitince karşınıza aşağıdaki pencereler gelecekir.
57
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
7) WebSite11’e sağ tıklayıp açılan pencereden “Add ASP.Net folder > App_Code” Seçiyoruz ve App_Code klasörü
ekleniyor. Buraya Class’ımızı ekleyeceğiz.
8)Şimdide App_Code klasörüne sağ tıklayarak Add New Item seçelim.
9)Aşağıdaki pencere açılacaktır. Buradan Class seçip adını “veritabani” koyup Add diyelim.
58
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
10)Uye.cs Class’ına girerek aşağıdaki kodu yazalım.
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.OleDb;
/// <summary>
/// Summary description for islem
/// </summary>
public class veritabani
{
public static DataTable selectcalistir(string sql)
{
OleDbConnection con = new
OleDbConnection("provider=microsoft.jet.oledb.4.0;data source =" +
HttpContext.Current.Server.MapPath("~/App_data/vt.mdb"));
con.Open();
OleDbDataAdapter da = new OleDbDataAdapter(sql, con);
DataTable dt = new DataTable();
da.Fill(dt);
con.Close();
return dt;
}
public static string komutcalistir(string sql)
{
string mesaj = "";
OleDbConnection con = new
OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" +
HttpContext.Current.Server.MapPath("~/App_data/vt.mdb"));
con.Open();
OleDbCommand cmd = new OleDbCommand(sql, con);
try
{
59
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
mesaj = ex.Message;
}
con.Close();
return mesaj;
}
}
Bu şekilde class’ımızı oluşturmuş olduk.
11) Şimdi ise kaydının yapıldığı sayfayı tasarlayalım.
Bunun için 5 adet TextBox, 1 Button, 1 CheckBox, 1 RequiredFieldValidator, 1 Compare Validator ekleyelim.
Valitator ayarlarını yapalım. Ve aşağıdaki kodu bu sayfa için yazalım.
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class UyeKayit : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
if (CheckBox1.Checked)
{
string sec = string.Format("insert into Uye (KullaniciAdi,Sifre,Ad,Soyad)
values ('{0}','{1}','{2}','{3}')", TextBox1.Text, TextBox2.Text, TextBox4.Text,
TextBox5.Text);
string msg = veritabani.komutcalistir(sec);
if (msg != "")
{
60
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Response.Redirect(msg);
}
else
{
Label1.Text = "Üye Kaydı Başarıyla Yapılmıştır.";
}
}
}
}
Gereken bilgileri yazdıktan sonra Kaydet dediğimizde “Üye Kaydı Başarıyla Yapılmıştır” uyarısı gözükecektir.
Veritabanına bakarsak üye kaydının yapıldığını göreceğiz.
61
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
İletişim Sayfası
Web sayfalarının olmazsa olmazlarından biri de iletişim sayfasıdır. İletişim sayfasının olması yanında, sağlam
çalışması da şarttır. Şimdi de İletişim sayfasının uygulamasını yapalım.
3)Gönder ve Temizle butonlarının içine aşağıdaki kodları yazmamız gerekmektedir.
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Net.Mail;
public partial class iletisim : System.Web.UI.Page
{
protected void btnGonder_Click(object sender, EventArgs e)
24
1)Yeni bir Web Sayfası açalım.
2)Toolboxdan sayfaya 5 adet TextBox, 2 adet Buton, 5 adet RequiredFieldValidator , 1
adet RegularExpressionValidator ve 1 adet Label ekleyerek aşağıdaki gibi tasarlayın.
62
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
{
try
{
string mesaj = "<b>Gönderen:<b><br>" +
"-----------------<br><br>" +
"<b>Adınız : </b> " + txtAdiniz.Text + "<br>" +
"<b>Soyadınız : </b> " + txtSoyAdiniz.Text + "<br>" +
"<b>E-Mail Adresiniz:</b> " + txtEposta.Text + "<br>" +
"<b>Konu:</b> " + txtKonu.Text +"<br>"+
"<b>İçerik:</b><br> " + txtMesaj.Text;
MailMessage mail = new MailMessage();
//Mail gönderecen bilgisi.
mail.From = new MailAddress(txtEposta.Text);
mail.IsBodyHtml = true;
mail.Subject = txtKonu.Text;
//Maili ulaştıracağınız mail adresi
mail.To.Add(new MailAddress("msn@gokhanturan.com"));
mail.Body = mesaj;
SmtpClient mailSender = new SmtpClient();
System.Net.NetworkCredential izin = new System.Net.NetworkCredential();
//Maili göndereceğiniz mail adresi
izin.UserName = "msn@gokhanturan.com";
//Sifreniz
izin.Password = "**********";
//Maili göndereceğiniz host bilgileri
mailSender.Host = "mail.gokhanturan.com";
mailSender.Credentials = izin;
mailSender.Send(mail);
lblGeriDonut.Text = "E-postanız Başarı İle İletilmiştir.";
txtAdiniz.Text = "";
txtSoyAdiniz.Text = "";
txtKonu.Text = "";
txtEposta.Text = "";
txtMesaj.Text = "";
}
catch (Exception ex)
{
lblGeriDonut.Text = "E-posta yollanamadı! Lütfen tekrar deneyiniz..!";
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
}
protected void Button8_Click(object sender, EventArgs e)
{
txtAdiniz.Text = "";
txtSoyAdiniz.Text = "";
txtKonu.Text = "";
txtEposta.Text = "";
txtMesaj.Text = "";
lblGeriDonut.Text = "";
}
}
63
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Fotoğraf Galerisi ve Upload
Yapacağınız web sayfalarında fotoğraf galerisi olması, sitenin daha kullanışlı olmasını sağlar. Şimdi de fotoğraf
galerisi ekleme ve bu galeriye resim yükleme ile ilgili uygulama yapacağız.
Reperater’ın HTML kod kısmına aşağıdaki kod yazılır.
<ItemTemplate>
<div style="background-color:#ccc; padding:2px 5px;"><%# Eval("slayt_adi") %></div>
<div style="background-color:#eee; margin:0 0 10px 0; padding:5px;">
<%# resimleri_al(Eval("resimler").ToString(), Eval("id").ToString()) %></div>
</ItemTemplate>
Yani HTML kod kısmı tamamıyla aşağıdaki gibi alacaktır.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Galeri</title>
<link href="css/prettyPhoto.css" rel="stylesheet" type="text/css" />
<script src="jquery-1.2.6.pack.js" type="text/javascript"></script>
<script src="jquery.prettyPhoto.js" type="text/javascript"></script>
<script>
$(document).ready(function(){
$("a[rel^='slayt']").prettyPhoto({
animationSpeed: 'normal',
padding: 40,
opacity: 0.5,
showTitle: false,
allowresize: true,
counter_separator_label: '-'
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div style="width:600px;">
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<div style="background-color:#ccc; padding:2px 5px;"><%# Eval("slayt_adi")
%></div>
<div style="background-color:#eee; margin:0 0 10px 0; padding:5px;">
<%# resimleri_al(Eval("resimler").ToString(), Eval("id").ToString()) %>
</div>
</ItemTemplate>
</asp:Repeater>
</div>
25
1)Yeni bir Web Sayfası açalım.
2)Toolbox Data kısmından Repeater çalışma sayfasına sürüklenir.
64
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
<script type="text/javascript">var gaJsHost = (("https:" ==
document.location.protocol) ? "https://ssl." :
"http://www.");document.write(unescape("%3Cscript src='" + gaJsHost + "google-
analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));</script><script
type="text/javascript">var pageTracker = _gat._getTracker("UA-5427731-
1");pageTracker._trackPageview();</script>
</form>
</body>
</html>
Veri tabanı ise aşağıdaki gibi olacaktır.
Sayfanın loadındaki kodlar ise aşağıdaki gibidir.
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
public partial class galeri : System.Web.UI.Page
{
OleDbConnection bg;
protected void Page_Load(object sender, EventArgs e)
{
bg = new OleDbConnection("provider=microsoft.jet.oledb.4.0; data source=" +
Server.MapPath("~/deneme.mdb"));
OleDbDataAdapter adaptor = new OleDbDataAdapter("select * from resimler order by
id desc", bg);
DataTable table = new DataTable();
adaptor.Fill(table);
Repeater1.DataSource = table;
Repeater1.DataBind();
}
public string resimleri_al(string resimler, string resim_id)
{
string[] dizi = resimler.Split('ß');
string sonuc = "";
for (int i = 0; i < dizi.Length-1; i++)
{
sonuc += "<a rel=slayt["+resim_id+"] href='img/" + dizi[i] + "'><img
src='img/kucuk/"+dizi[i]+"' border=0/></a> ";
65
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
}
return sonuc;
}
}
Veri tabanına kayıtlı resim isimleri aşağıdaki gibidir.
*Görüldüğü gibi her bir resim arasında “ß” sembolü vardır.
Galerinin son hali aşağıdaki gibidir.
Unutulmaması gereken “jquery-1.2.6.pack.js” ve “jquery.prettyPhoto.js” dosyalarının ve bunun yanında jquery’ye
ait resimlerin aynı klasörde olması gerekmektedir.
66
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
Galeriye Resim Yükleme (Upload)
Resim Upload edeceğimiz sayfa aşağıdaki gibidir. Bunu tasarladıktan sonra kod kısmına geçiyoruz.
“Upload Et” butonunun içine kodumuzu yazıyoruz. Aşağıda tüm kodlar yer almaktadır.
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
public partial class upload : System.Web.UI.Page
{
FileUpload[] fu = new FileUpload[20];
OleDbConnection bg;
protected void Page_Load(object sender, EventArgs e)
{
bg = new OleDbConnection("provider=microsoft.jet.oledb.4.0; data source=" +
Server.MapPath("~/deneme.mdb"));
kontrol_ekle();
Button1.Enabled=false;
}
public static System.Drawing.Image Olcekle(string resimYolu, int wid, int hei)
{
System.Drawing.Image imgOrg = System.Drawing.Image.FromFile(resimYolu);
67
Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com
System.Drawing.Image imgOlceklenmis = imgOrg.GetThumbnailImage(wid, hei, null,
IntPtr.Zero);
imgOrg.Dispose();
return imgOlceklenmis;
}
public void uploads()
{
for (int i = 0; i < int.Parse(adet_sec.SelectedValue); i++)
{
FileUpload f = fu[i];
if (f.HasFile)
{
f.SaveAs(Server.MapPath("~/img/") + fu[i].FileName);
System.Drawing.Image Kucuk = Olcekle(Server.MapPath("~/img/" + f.FileName),
150, 80);
Kucuk.Save(Server.MapPath("~/img/kucuk/" + f.FileName));
}
}
}
public void kontrol_ekle()
{
for (int i = 0; i < int.Parse(adet_sec.SelectedValue); i++)
{
fu[i] = new FileUpload();
fu[i].ID = "fu_" + i.ToString();
resimler.Controls.Add(fu[i]);
}
}
public string resim_adlari()
{
string sonuc = "";
for (int i = 0; i < int.Parse(adet_sec.SelectedValue); i++)
{
FileUpload f = fu[i];
if (f.HasFile)
{
sonuc += f.FileName.Replace("ß", "") + "ß";
}
}
return sonuc;
}
protected void Button1_Click(object sender, EventArgs e)
{
uploads();
kayit(resim_adlari());
}
public void kayit(string resimler)
{
OleDbCommand komut = new OleDbCommand("insert into resimler (slayt_adi,resimler)
values('"+TextBox1.Text+"','"+resimler+"')", bg);
bg.Open();
komut.ExecuteNonQuery();
bg.Close();
}
}
Galeri oluşturmak için “jquery” dosyalarını indirmek için tıklayınız.

Más contenido relacionado

La actualidad más candente

Php kursu-izmir
Php kursu-izmirPhp kursu-izmir
Php kursu-izmirsersld88
 
2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği
2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği
2010 Kocaeli Linux Günleri - Linux Web GeliştiriciliğiBurak Oğuz
 
Php en-iyi-kursu
Php en-iyi-kursuPhp en-iyi-kursu
Php en-iyi-kursusersld89
 
Php kursu-beykoz
Php kursu-beykozPhp kursu-beykoz
Php kursu-beykozsersld88
 
Php egitim-seti
Php egitim-setiPhp egitim-seti
Php egitim-setisersld89
 
Php odev-sitesi
Php odev-sitesiPhp odev-sitesi
Php odev-sitesisersld89
 
Php kursu-bursa
Php kursu-bursaPhp kursu-bursa
Php kursu-bursasersld88
 
Php kursu-eyup
Php kursu-eyupPhp kursu-eyup
Php kursu-eyupsersld88
 
Php ozel-hocasi
Php ozel-hocasiPhp ozel-hocasi
Php ozel-hocasisersld89
 
Internet programcılığı 1
Internet programcılığı 1Internet programcılığı 1
Internet programcılığı 1Erol Dizdar
 
Php en-iyi-egitimi
Php en-iyi-egitimiPhp en-iyi-egitimi
Php en-iyi-egitimisersld89
 
Php gorsel-egitim-seti
Php gorsel-egitim-setiPhp gorsel-egitim-seti
Php gorsel-egitim-setisersld89
 
Php tasarimi
Php tasarimiPhp tasarimi
Php tasarimisersld89
 

La actualidad más candente (20)

Php kursu-izmir
Php kursu-izmirPhp kursu-izmir
Php kursu-izmir
 
2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği
2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği
2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği
 
Php en-iyi-kursu
Php en-iyi-kursuPhp en-iyi-kursu
Php en-iyi-kursu
 
Php kursu-beykoz
Php kursu-beykozPhp kursu-beykoz
Php kursu-beykoz
 
Php indir
Php indirPhp indir
Php indir
 
Php egitim-seti
Php egitim-setiPhp egitim-seti
Php egitim-seti
 
Claroline sunusu
Claroline sunusuClaroline sunusu
Claroline sunusu
 
Php odev-sitesi
Php odev-sitesiPhp odev-sitesi
Php odev-sitesi
 
Php kursu-bursa
Php kursu-bursaPhp kursu-bursa
Php kursu-bursa
 
Php kursu-eyup
Php kursu-eyupPhp kursu-eyup
Php kursu-eyup
 
Php ozel-hocasi
Php ozel-hocasiPhp ozel-hocasi
Php ozel-hocasi
 
Internet programcılığı 1
Internet programcılığı 1Internet programcılığı 1
Internet programcılığı 1
 
Php 2016
Php 2016Php 2016
Php 2016
 
Php 2015
Php 2015Php 2015
Php 2015
 
Claroline sunusu
Claroline sunusuClaroline sunusu
Claroline sunusu
 
Php 2012
Php 2012Php 2012
Php 2012
 
Php en-iyi-egitimi
Php en-iyi-egitimiPhp en-iyi-egitimi
Php en-iyi-egitimi
 
Php video
Php videoPhp video
Php video
 
Php gorsel-egitim-seti
Php gorsel-egitim-setiPhp gorsel-egitim-seti
Php gorsel-egitim-seti
 
Php tasarimi
Php tasarimiPhp tasarimi
Php tasarimi
 

Similar a Internet programcılığı-i

WEB SERVİCE
WEB SERVİCE WEB SERVİCE
WEB SERVİCE AliMETN
 
ASP.NET MVC'den ASP.NET Core'a Geçiş
ASP.NET MVC'den ASP.NET Core'a GeçişASP.NET MVC'den ASP.NET Core'a Geçiş
ASP.NET MVC'den ASP.NET Core'a GeçişSinan Bozkuş
 
Yazılım Geliştirme Teknolojileri
Yazılım Geliştirme TeknolojileriYazılım Geliştirme Teknolojileri
Yazılım Geliştirme TeknolojileriYusuf AYTİN
 
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş SüreciASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş SüreciSinan Bozkuş
 
Aspnet temelleri
Aspnet temelleriAspnet temelleri
Aspnet temellerimetehanates
 
Gelecegin Gelistiricileri Icin PHP Programlama Dili ve Oneriler
Gelecegin Gelistiricileri Icin PHP Programlama Dili ve OnerilerGelecegin Gelistiricileri Icin PHP Programlama Dili ve Oneriler
Gelecegin Gelistiricileri Icin PHP Programlama Dili ve OnerilerMustafa Ileri
 
Spring Web Service
Spring Web ServiceSpring Web Service
Spring Web Servicedasgin
 
ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik DesteğiASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik DesteğiAli İhsan Çalışkan
 
Csharpnedir
CsharpnedirCsharpnedir
Csharpnedirbykezza
 
Yazılım Geliştiriciler İçin Sharepoint 2010
Yazılım Geliştiriciler İçin Sharepoint 2010Yazılım Geliştiriciler İçin Sharepoint 2010
Yazılım Geliştiriciler İçin Sharepoint 2010Evren Ayan
 
Office 2010 Araçları
Office 2010 AraçlarıOffice 2010 Araçları
Office 2010 AraçlarıEren Caner
 
Kütüphanelerde Web Sitesi Hazırlama ve Uygulama Semineri (FrontPage)
Kütüphanelerde Web Sitesi Hazırlama ve Uygulama Semineri (FrontPage)Kütüphanelerde Web Sitesi Hazırlama ve Uygulama Semineri (FrontPage)
Kütüphanelerde Web Sitesi Hazırlama ve Uygulama Semineri (FrontPage)Kamil Çömlekçi
 
Visual studio 2010 ve tfs 2010 yeni takim gelistirme ozellikleri
Visual studio 2010 ve tfs 2010 yeni takim gelistirme ozellikleriVisual studio 2010 ve tfs 2010 yeni takim gelistirme ozellikleri
Visual studio 2010 ve tfs 2010 yeni takim gelistirme ozellikleriMurat Başeren
 
ESRI Turkey User Conf 2009
ESRI Turkey User Conf 2009ESRI Turkey User Conf 2009
ESRI Turkey User Conf 2009metalalp
 

Similar a Internet programcılığı-i (20)

sunu (Asp.net -1)
sunu (Asp.net -1)sunu (Asp.net -1)
sunu (Asp.net -1)
 
WEB SERVİCE
WEB SERVİCE WEB SERVİCE
WEB SERVİCE
 
ASP.NET MVC'den ASP.NET Core'a Geçiş
ASP.NET MVC'den ASP.NET Core'a GeçişASP.NET MVC'den ASP.NET Core'a Geçiş
ASP.NET MVC'den ASP.NET Core'a Geçiş
 
Yazılım Geliştirme Teknolojileri
Yazılım Geliştirme TeknolojileriYazılım Geliştirme Teknolojileri
Yazılım Geliştirme Teknolojileri
 
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş SüreciASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
 
Node js giriş (intro)
Node js giriş (intro)Node js giriş (intro)
Node js giriş (intro)
 
Aspnet temelleri
Aspnet temelleriAspnet temelleri
Aspnet temelleri
 
Gelecegin Gelistiricileri Icin PHP Programlama Dili ve Oneriler
Gelecegin Gelistiricileri Icin PHP Programlama Dili ve OnerilerGelecegin Gelistiricileri Icin PHP Programlama Dili ve Oneriler
Gelecegin Gelistiricileri Icin PHP Programlama Dili ve Oneriler
 
Spring Web Service
Spring Web ServiceSpring Web Service
Spring Web Service
 
ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik DesteğiASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
 
12factor apps
12factor apps12factor apps
12factor apps
 
.Net Core sunum
.Net Core sunum.Net Core sunum
.Net Core sunum
 
Csharpnedir
CsharpnedirCsharpnedir
Csharpnedir
 
Yazılım Geliştiriciler İçin Sharepoint 2010
Yazılım Geliştiriciler İçin Sharepoint 2010Yazılım Geliştiriciler İçin Sharepoint 2010
Yazılım Geliştiriciler İçin Sharepoint 2010
 
Office 2010 Araçları
Office 2010 AraçlarıOffice 2010 Araçları
Office 2010 Araçları
 
Web
WebWeb
Web
 
Kütüphanelerde Web Sitesi Hazırlama ve Uygulama Semineri (FrontPage)
Kütüphanelerde Web Sitesi Hazırlama ve Uygulama Semineri (FrontPage)Kütüphanelerde Web Sitesi Hazırlama ve Uygulama Semineri (FrontPage)
Kütüphanelerde Web Sitesi Hazırlama ve Uygulama Semineri (FrontPage)
 
Visual studio 2010 ve tfs 2010 yeni takim gelistirme ozellikleri
Visual studio 2010 ve tfs 2010 yeni takim gelistirme ozellikleriVisual studio 2010 ve tfs 2010 yeni takim gelistirme ozellikleri
Visual studio 2010 ve tfs 2010 yeni takim gelistirme ozellikleri
 
ESRI Turkey User Conf 2009
ESRI Turkey User Conf 2009ESRI Turkey User Conf 2009
ESRI Turkey User Conf 2009
 
Php veritabani
Php veritabaniPhp veritabani
Php veritabani
 

Internet programcılığı-i

  • 1. İnternet Programcılığı II T.C. Mehmet Akif Ersoy Üniversitesi Gölhisar Meslek Yüksekokulu *ASP.Net Microsoft tarafından tasarlanan web uygulama dilidir. Programcılar ASP.Net kullanarak dinamik web siteleri, web uygulamaları ve XML web servisleri geliştirebilirler. ASP.Net .Net platformunun bir parçasıdır ve ASP’nin devamı olarak nitelendirilmektedir. ASP.Net Common Language Runtime üzerine inşa edilmiştir, bu demektirki programcılar herhangi bir Microsoft .NET dilini kullanarak ASP.Net kodu üretebilirler.+ Öğr.Gör. Gökhan TURAN http://www.gokhanturan.com gokhanturan@gokhanturan.com
  • 2. 2 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com HTML Nedir? Web sayfalarının büyük çoğunluğu HTML içeren metin tabanlı sayfalar olarak hazırlanmaktadır. Bu sayfalar istemci tarafında çalıştığı için kaynak kodlar kullanıcı tarafından görülmektedir. İşlem basamakları 1. Web sunucu istekte bulunulan adresin dosya uzantısından dosyanın bir html dosyası olduğunu algılar. 2. HTML dosya sabit diskten okunarak istemciye gönderilir. 3. İstemcideki web tarayıcı dosyayı yorumlar ve sonucu gösterir. HTML avantajları 1. Tüm tarayıcılarda düzgün bir şekilde gösterilebilir. 2. Her istek hızlı gerçekleştirilir ve en az düzeyde kaynak kullanılır. 3. Öğrenmek kolaydır. HTML dezavantajları 1. Çok etkileşimli değildir. 2. Tasarımları düzenlenmesi ve kontrolü zordur. 3. Çok sayıda sayfa içeren siteler için kullanışlı değildir. 4. Hızlı değişen içerik ve kişiselleştirmeler için kullanışlı değildir. Microsoft .NET nedir? Microsoft .NET insanların, bilginin, sistemlerin ve cihazların iletişimini sağlayan bir platformdur. İstemci ve sunucu uygulamaların yanı sıra geliştirme araçlarını da kapsamaktadır. Bu oluşum içerisinde aynı zamanda:
  • 3. 3 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Web tabanlı uygulamaların, web servislerinin ve her türlü uygulamanın geliştirilip çalıştırılabildiği bir platform olan .NET Framework de bulunmaktadır. .NET Framework ile uygulamalar iletişim standartlarına (SOAP, XML, HTTP vb) uygun olarak geliştirilebilmektedir. Visual Studio .NET, entegre geliştirme ortamlarına (Integrated Development Environment - IDE ) ve araçlara sahiptir. Bu araçlar sayesinde .NET Framework ile uygulama geliştirme daha kolay hale gelmekte ve verimlilik maksimum düzeye ulaşmaktadır. .NET Framework nedir? Microsoft .NET Framework, uygulamaların ve web servislerinin inşa edilebildiği (build), yayımının yapılabildiği (deploy) ve çalıştırılabildiği (run) bir platformdur. "Build - Deploy - Run" .NET Framework platformu için üç anahtar kelimedir. Verimliliği yüksek, standartlara uygun ve çoklu dil desteği bulunan bir platformdur. Internet ölçekli uygulamaların operasyonu ve yayımlanması için karşımıza çıkan zorluklar .NET Framework'ün sağladığı servisler sayesinde rahatlıkla aşılabilmektedir. .NET Framework iki temel bölümden oluşmaktadır: Common Lanuguage Runtime, Hiyerarşik düzendeki sınıf kütüphanesi. .NET Framework: 20 den fazla programlama diline destek vermekte, uygulama geliştiricilerin iş mantığı (business logic) içeren kod kısmına yoğunlaşmalarını sağlamakta, güvenli, sağlam, yüksek performanslı uygulamaların geliştirilebilmesini sağlamaktadır. Eskiye göre; geliştirme, yayımlama ve yönetimin çok daha kolay olduğu bir platformdur.
  • 4. 4 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com ASP Nedir? Sunucu taraflı bir teknoloji olan ASP, kullanıcı tarafına etkileşimli, dinamik Web sayfaları göndermek için kullanılır. ASP, Web programcılarına HTML, scripting ve kullanıcıdan bağımsız veritabanı uygulamalarını özgürce kullanma fırsatı verir. ASP programlama ortamının özgür olmasının sebebi tüm derleme işleminin sunucu tarafında bitmesi ve kullanıcının sadece sonuçta oluşan HTML sayfalarını görmesidir. ASP Nasıl Çalışır? Tarayıcıya açmasını istediğiniz dosyanın adresini yazıp çağırdığımızda (Sunucu) kendisinden icra etmesini istediğiniz dosyayı arar bulur ve eğer bulursa, bu dosyayı hemen "asp.dll" adlı bir programa iletir. asp.dll'de aldığı bu dosyayı hemen yorumlamaz. "Global. asa" adlı dosyanın çalışıp çalışmadığını kontrol eder. Asp.dll önce gelen dosyada hangi script dilinin kullanıldığına bakar. Ve buna göre kendini hazırlar. Asp.dll sonra bu derlediği bilgileri, tamamen asp kodlarından ayrılmış, temiz bir halde browser'a gönderir. Bizde böylece sadece HTML kodlarını görürüz. ASP.Net Nedir? Asp.net Microsoft tarafından tasarlanan web uygulama dilidir. Programcılar asp.net kullanarak dinamik web siteleri, web uygulamaları ve XML web servisleri geliştirebilirler. Asp.net .Net platformunun bir parçasıdır ve asp nin devamı olarak nitelendirilmektedir.
  • 5. 5 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Asp.net Common Language Runtime üzerine inşa edilmiştir, bu demektirki programcılar herhangi bir Microsoft .NET dilini kullanarak asp.net kodu üretebilirler. ASPX Uzantısı Aspx uzantısı asp.net de programlanan web sitelerinin uzantısıdır. Eğer bir web sayfasının uzatısı aspx ise bu demektir ki, bu web sitesi asp.net kullanarak tasarlanmıştır. Aspx dosyası içerisinde <% -- dinamik kod --%> php,jsp ve asp’de de olduğu gibi direk sayfa üzerinde asp.net kodlarıda yazılabilir. Fakat tavsiye edilen asp.net kodlarının code-behind modelinde yazılmasıdır ( Arka plan kodları ). Bu modeli kullandığımızda asp.net kodlarını başka bir sayfaya kaydeder. Örnek olarak: index.aspx.cs veya index.aspx.vb bu sayfaları Microsoft Visual Studio otomatik olarak sizin için yaratır. Bu şekilde yazılan bir web sitesinde programcılar bir olay üzerine kod yazabilirler. Örnek olarak: Page_load (Sayfa üretildiğinde ) ASP.NET de Performans ASPX ve diğer dosyalar IIS virtual host denilen yerde tutulurlar. İlk sayfa açılışında .NET Framework dosyaları .NET assembly diline çevirerek cevap verir ve dll dosyası yaratır. Diğer açılışlarda da bu dll leri kullanır ve bu bize çok büyük bir performans sağlar. Avantajları Nelerdir? ASP.NET, daha önce kullanılan Web geliştirme (ASP, JSP gibi) modellerine göre aşağıda listelenen birçok önemli avantajı sağlamaktadır: 1) Geliştirilmiş Performans ASP.Net sayfaları, sunucu üzerinde çalıştırılan NGWS çalıştırıcısı kodlarıdır. Yorumlama temeline göre çalışan daha öncekilerle (ASP gibi) karşılaştırıldığında, erken bağdaştırma (early binding), tam zamanında derleme (just-in-time compilation) ve doğal iyileme (native optimization) ve tamponlama hizmetleri (caching services) gibi avantajlar sağlamaktadır. Yukarıda anılan bu özellikler, geliştiriciler için daha kod yazmaya başlamadan önce sağlanan çarpıcı performans iyileştirmeleridir. 2) Üstün Nitelikli Araç Desteği ASP.Net çatısı, geliştirme ortamıyla bütünleştirilmiş olan Visual Studio ile sunulan zengin bir araç takımı ve tasarımcısı ile tamamlanmıştır. WYSIWYG düzenleme (editing), sürükle-bırak tarzı sunucu denetimleri (server controls) ve otomatik dağıtım (deployment) bu güçlü araçların sağlamış olduğu özelliklerin yalnızca birkaç tanesinden bazılarıdır. 3) Güç ve Esneklik ASP.Net, NGWS çalıştırıcısı üzerine temellendirildiğinden, bu platformun tüm esneklik ve gücü Web uygulama geliştiricisi tarafından kullanılabilir durumdadır. NGWS çalıştırıcısının Temel Sınıf Kütüphaneleri (Base Class libraries), iletim (messaging) ve veri erişim (data access) çözümleri, benzeri olmayan bir biçimde Web"ten erişilebilir
  • 6. 6 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com durumdadır. ASP.NET, ayrıca dile bağımlı değildir, şöyle ki, geliştiriciler uygulamalarında en uygun olan dili seçerek kodlama yapabilir. Hatta uygulamaların değişik bölümleri değişik dillerde yazılarak karma programlama avantajlarından yararlanmak söz konusudur. Dahası, ASP.Net"a geçiş söz konusu olduğunda, hali hazır kullanılmakta olan COM tabanlı uygulamalara yapılan yatırımlar NGWS çalıştırıcısının karşılıklı işleyebilirlik (interoperability) desteğiyle ile garanti altına alınmaktadır. 4) Basitlik ASP.NET, basit form bilgileri gönderiminden, kimlik doğrulama, kullanıcı tanıma, uygulama dağıtımı ve site yapılandırmaya kadar tüm genel görevleri yapmayı son derece basitleştirmektedir. Örneğin, ASP.NET Sayfa Anaçatısı, uygulama mantığı, olay eldesi ve sunum (veya görüntüleme) kodlarının tıpkı VB-benzeri form işleme modelinde olduğu gibi net şekilde ayrılmasını sağlayarak daha kolay okunabilir ve yönetilebilir kullanıcı arayüzleri oluşturulmasını mümkün kılmaktadır. NGWS çalıştırıcısı ayrıca otomatik referans sayımı ve çöp toplama gibi yönetilebilen kod servisleri ile de geliştirme işlemini basitleştirmektedir. 5) Yönetilebilirlik ASP.NET, metin-tabanlı ve hiyerarşik bir yapılandırma sistemi kullanır. Böylelikle sunucu ortamı ve Web uygulamasına özel ayarların yapılması son derece basitleştirilmiştir. Çünkü yapılandırma bilgisi düz metin olarak depolanır, yeni ayarlar yerel yönetim araçlarını kullanmaksızın basit bir metin işlemci aracılığıyla yapılabilir. "Sıfır Yerel Yönetim" filozofisi ASP.NET uygulamalarının dağıtımını oldukça basitleştirir. Bir ASP.NET uygulaması, çok basit bir biçimde gerekli dosyaların sunucuya kopyalanması şeklinde dağıtılır. Sunucuyu yeniden başlatma veya derlenmiş kodun değiştirilmesi gibi işlemlere gerek yoktur. 6) Ölçeklenebilirlik ve Elde Edilebilirlik ASP.NET, ölçeklenebilirlik düşünülerek tasarlanmıştır. Bu nedenle, kümelenmiş ve çok-işlemcili ortamlarda performansı iyileştirmek üzere özel olarak tasarlanmış niteliklere sahiptir. Dahası, işlemler ASP.NET, çalıştırıcı (runtime) tarafından yakından izlenir ve yönetilir. Böylece yanlış davranan bir işlem (leaks, deadlock) varsa onun yerine uygulamanın istemleri devamlı şekilde yanıtlamasına yardım eden yeni bir işlem başlatılır. 7) İsteğe Bağlı Biçimlendirme ve Uzatılabilirlik ASP.NET, geliştiricilerin uygun gördüğü yerlerde kodlarına takı ("plug-in") yapmalarına izin veren iyi-faktörlü bir mimari sunmaktadır. Gerçekten de, ASP.NET çalıştırıcısının herhangi bir alt bileşenini kendi yazdığınız herhangi bir bileşenle zenginleştirebilir veya değiştirebilirsiniz. İsteğe bağlı doğrulama veya durum (state) servislerinin uygulanması hiçbir zaman olmadığından daha kolay hale getirilmiştir 8) Programlama Dilinde Bağımsızlık ASP.NET programlama dillerimden bağımsızdır. ASP.NET web yazılımları geliştirebilmek için 20 programlama dili ve fazlasını kullanabiliriz, örneğin, VB.NET, C#, JScript.NET, C++ with Managed Extensions, COBOL.NET, Perl.NET. 9) Derlenmiş Kod Bildiğimiz gibi asp scripting dilleriyle çalışıyor. Fakat ASP.NET derlenmiş kod ve güçlü tipli dillerle çalışıyor, yani gerçek programlama dilleriyle. ASP.NET bu nedenle gerçek veri tiplerini kullanıyor örneğin integers ve strings. ASP.NET de kullanılan programlama dilleri daha iyi olağanüstü durum işleme gücüne sahiptirler. ASP.NET içerisinde try … catch … finally deyimleri ile olağanüstü durum işleme imkanına sahibiz. 10) Sürükle & Bırak ve Olay Bazlı Programlama
  • 7. 7 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Eğer Visual Basic kullandıysanız, bilirsiniz ki VB’nin en güzel taraflarından birisi sürükle ve bırak objeleri sistemi ve olay bazlı programlama yani click, doubleclick, textchange gibi. ASP.NET bu özellikleri WEB Formlarıyla aynı şekilde kullanabilirisiniz. VB’de nasıl program geliştiriyorsanız, ASP.NET Web Formları da yani fonksiyonelliği sağlıyor. ASP.NET içerisinde gerçekten çok iyi dizayn edilmiş ve çok sayıda HTML kontrolleri vardır. Hemen hemen bir ASP.NET sayfasında bulunan bütün HTML kontrolleri Visual Basic, C#, C++ kodları ile kontrol edilebilir. ASP.NET buna ek olarak yeni nesneye dayalı programlamayı destekleyen, girdi kontrolleri, programlanabilir listbox’lari, yeni doğrulama kontrolleri (validation controls). ASP.NET içerisinde örneğin DataGrid, DataList kontrolleri olup bu kontroller web yazılım geliştiricisinin hayatini çok kolaylaştırmaktadır. 11) Mobile Programlama Desteği ASP.NET ile sadece web yazılımları değil ayrıca mobil telefonları ve PDA’lar (Palm, PocketPC’s, RIM devices, etc) içinde yazılım geliştirebilirsiniz. ASP.NET de mobil aletleri için WML (Wireless Markup Language) veya HTML 3.2 (Hyper Text Markup Language) veya cHTML (Compact Hyper Text Markup Language) of I-mode aletlerini destek sağlar. ASP.NET mobil aletin kullandığı protokolü otomatik olarak belirler ve ona göre sonucu geri döndürür. 12) Bağlantısız Veri Erişimi Asp ve ADO nun en önemli sorunlarından birisi ADO her zaman veritabanına canlı bağlantıyı tutar. Buda asp sayfalarının çalıştırılmasını önemli ölçüde yavaşlatır. ADO.NET bağlantısız veri erişimini sağlayan sistemi bizim kullanımımıza sunar. 13) Session state Asp session değişkenleri desteği çok sınırlıdır ve birden fazla web server dan oluşan sistemde session değişkenlerini hiç desteklemez. ASP.NET de ise olay tamamen değişiyor, birçok session depolama metodunu destekler örneğin In- Process (asp ile ayni), out-of-process (session durumu başka bir bilgisayardaki Windows Servis ile sağlanır) ve SQL Server’da. Out-of-process ve SQL Server seçenekleri web form desteği sağlar. 14) Güvenlik Desteği Asp sadece IIS authentication metodlarını desteklerken ASP.NET daha geniş güvenlik sistemini destekliyor örneğin IIS/Windows doğrulama sistemlerinden Basic doğrulama, Digest doğrulama, Integrated Windows doğrulama, Form bazlı doğrulama ve Microsoft Passport doğrulama. ASP.NET içerisinde yeni olarak Windows kullanıcı doğrulama (windows authentication) sistemine ek olarak form bazlı kullanıcı doğrulama (forms-based user authentication) sistemi geliştirilmiştir. Bu yeni sistemde çerez yönetimi (cookie management) ve otomatik olarak doğrulanmayan kullanıcıların başka bir web sayfasına gönderilmesi (automatic redirecting of unauthorized logins) gibi güzel özellikler eklenmiştir. İzlemek, Debug, ve Bellekleme Desteği (Tracing, debugging and caching support) asp sisteminde kodu izlemek ve BUG’lari bulmak bir derttir. Fakat ASP.NET içerisinde bu sistem çok daha geliştirilmiş, adım adım debug olayı ve diğer trace ve debug metotlarını desteklemektedir. ASP.NET bunlara ek olarak mükemmel bellekleme (caching API) sağlamaktadır. Verileri bellekleme sistem output caching, data caching, dependent caching ve fragment caching metodlarını destekler. 15) XML Bazlı Konfigürasyon Asp içerisinde ise konfigürasyon bilgileri çok değişik yerlerde saklanıyordu. Örneğin, IIS bilgileri IIS ****base (registry) de saklanmaktadır. Eğer COM/ COM+ bileşenlerini kullanıyorsanız, COM ve COM+ bileşenlerinin bütün bilgileri registry ve COM+ Catalog da saklanır. ASP.NET konfigürasyonu metin dosyaları ile yapılır. Bu metin dosyaları XML dosyalarıdır. ASP.NET de XML ayrı bir önem kazanmıştır. ASP.NET de çalışan programı kesmeden bu konfigürasyon dosyaları değiştirilebilir. ASP.NET bunu arka planda, kullanıcıdan saklayarak halleder. Yeni bir web isteği geldiğinde ASP.NET worker process (çalışan işlemci) yeni konfigürasyonla isleme devam eder.
  • 8. 8 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 16) XCopy Kurulum COM bileşenlerinden farklı olarak .NET bileşenleri Windows registry’e kayıt edilmesine gerek yoktur. Yapmamız gereken tek şey bileşeni derlemek, ASP.NET yazılımının bulunduğu klasörde BIN isimli bir klasöre ekledikten sonra bu derlediğimiz bileşeni kopyalamaktır. Gördüğünüz gibi artık registry ile uğraşmak yok. Bu gerçekten Microsoft’un uzun zamandır yapması gereken bir değişiklik idi. 17) Hosting Seçenekleri Asp bir ISAPI programı olup IIS e bağlıdır.Buna karsın, ASP.NET ise .NET framework üzerinde çalışır, böylece ASP.NET sayfaları bu nedenle IIS dışındaki web serverları tarafından da sunulabilecektir. 18) Daha hızlı web uygulamaları ASP.NET derlenmiş kod ve saklanma işlemi ile hız kazanıyor. Daha önceki ASP sürümlerinde bir kullanıcı web sitesine girdiği zaman bilgisayar üzerinde anlık derlemeler yapılırdı ve bu hız kaybına neden olurdu. Artık ASP.NET ile hazırlanmış bir kod, bir ziyaretçi tarafından hiçbir zaman ziyaret edilmese bile derleniyor. Saklama işlemiyle de hafızaya bilgi depolanıp, bu sayede kullanıcılara verilerin daha hızlı yollanması sağlanabiliyor. ASP.NET ile programcılar sayfalarını her kullanımda yeniden aratmak yerine bir kısmını "caching" yani tamponlama işlemi sayesinde daha hızlı erişilebilir hale getirebiliyorlar. Bir diğer değişiklik ise ASP.NET ile veritabanındaki belirli verilerin saklanabilir hale getirilebilmesi. Bu sayede çok değişmeyen bir veritabanını her seferinde tekrar yüklenmek yerine, hızlı erişilebilir forma sokulmuş oluyor. 19) Güçlü veritabanı fonksiyonları ASP gibi ASP.NET de programcıların veri tabanlarıyla etkileşimli çalışabilen web uygulamaları yapabilmesine izin veriyor. ASP.NET"in asıl avantajlı bir çok programlama aracına imkan veren Nesne Merkezli (Object Oriented) programlama ile çalışması. Bu sayede daha fonksiyonel ve daha hızlı tasarıma imkân sağlıyor. 20) Hafıza sızıntısı ve çökme koruması ASP.NET teki en çok beğenilen yeniliklerin başında hafıza sızıntısı ve çökme koruması özellikleri geliyor. Özellikle hafıza sızıntısı, çoğu kullanıcı tarafından pek bilinen bir konu değilken, sistem yöneticilerini sıkıntıya sokan durumlardan biridir. ASP.NET ile bu hatalar otomatik olarak düzeltilerek, kullanıcıların her zaman web sitesine ulaşabilmesi sağlanıyor. 21) Çoklu dil desteği Programcılar artık 25"ten fazla .NET dili ile ASP.NET"i kullanabiliyorlar. Bu dillerden bazıları VB.NET, C# ve Jscript NET. Geniş dil desteği sayesinde birçok programcı web uygulamalarını kolayca hizmete sunabiliyor. 22) .NET"in parçası olmak .NET çatısı 3400"den fazla sınıftan oluşan bir yapıya sahip, ASP.NET de .NET"in bir parçası olduğu için neredeyse web uygulaması olarak yapılamayacak hiçbir şey yokmuş gibi gözüküyor. 23) Programlar ve HTML artık aynı sayfada değil Önceki sürüm ASP’lerde göze çarpan sorunlardan biri HTML sayfasında programlamanın da görünmesiydi. Diğer bir deyişle, scriptler ve HTML aynı sayfadaydı. Artık gösterilen kod ile script kodu ayrılmış olduğundan, Microsoft bunun önüne geçmek için bir önlem almış gibi görünüyor.
  • 9. 9 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Dezavantajları 1) Windows zorunluluğu ASP.NET halen Windows işletim sistemi kullanan bir sunucu üzerinde yapılandırılmak zorunda; kısacası platform bağımsız değil. ASP’de de olan bu sorunu çözmek için Linux sistemlerinde çalışan birkaç ASP hosting sunucusu geliştirildiyse de, işin açıkçası pek başarılı olabilmiş değil. ASP.NET de hali hazırda Windows ve IIS (Internet Information Server)’a mahkûm görünüyor. 2) Eklenti krizi ASP.NET kaynak olarak bedava gibi görünebilir ama programlama konusunda bilgili değilseniz hazırlıklı olmanız gereken bir durum var, o da eklentiler. Bir işlemi yapmak için gereken eklentiler genelde ücretli olarak satılıyor. Tabii saatlerce uğraştan sonra bedava olan birkaç eklentiyi zor da olsa bulabilirsiniz. 3) Hosting maliyeti Eğer dışarıdan hosting hizmeti alacaksanız biraz daha fazla para ödemeye hazırlıklı olmanız gerekiyor. Çünkü genel olarak Windows hosting daha pahalı ki bu da normal olması gereken bir fark. 4) Güvenlik Güvenlik açıkları ASP.NET"ten değil ne yazık ki IIS"ten kaynaklanıyor. Her yeni sürümde açıkları kapansa da IIS dünya çapında güvenlik açıklarıyla ünlü. Fakat .NET ile bununda bir dezavantaj olmaktan çıkması bekleniyor. 5) Bedava değil Evet, buna bir çok kişi şaşıracak ama temelde ASP.NET bedava değil. Ne de olsa kendi bilgisayarınızda ASP.NET kullanabilmek için (lisanslı) bir Windows sürümüne ihtiyacınız var. Bu da demek ki tam anlamıyla bedava değil. ASP.Net Web Uygulamaları Bir web projesi açmak için VS.NET 2008’i açtıktan sonra üst menüden File > New > Web Site seçeneğinin seçtikten sonra karşımıza web site açma penceresi gelecektir. Açılan pencerede Templates kısmından ASP.NET Web Site seçeneğini seçin. Language seçeneğinin C# olmasına dikkat edin. Location kısmından File System’i oradanda nereye kaydedecekseniz konumu belirtiniz ve OK düğmesine basınız.
  • 10. 10 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Resim 1:Visual Studio 2008 Resim 2:Yeni Web Sayfası Oluşturma Penceresi
  • 11. 11 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Resim 3:Visual Studio 2008 İle ASP.Net Web Sayfası Tasarlama Sol bölümde Toolbox (araçlar) yeralmaktadır. Orta kısım tasarım yapılan yerdir. Sağda üstte Solution Explorer bulunmaktadır. Solution Explorer’de projede yer alan tüm dosyalar ve klasörler listelenmektedir. Onun altında ise Properties bölümü yer almaktadır. Tasarım kısmında seçilen nesnenin özellikleri gösterilmektedir. Bir Web sayfası tasarımı üç farklı yerden yapılmaktadır. Örneğin Default.aspx dosyası tasarımında: Solution Explorer’de Default.aspx’in altında bağlı olarak Default.aspx.cs görülmektedir. Default.aspx.cs dosyası program kodlarının bulunduğu dosyadır. Default.aspx ise html kodları ile sayfa tasarımını içermektedir. Default.aspx açıldığında (html kodlarını içeren sayfa) farklı iki görünüm vardır. Birincisi Design (Tasarım) görünümü. Bunda sayfa tasarımı tamamen görsel olarak yapılmaktadır. Source (html kod) görünümde ise sayfanın ASP.NET için geliştirilmiş html kodları görülmektedir. Default.aspx.cs dosyasında ise C# dili ile yazılan ve asp kontrollerine ait program kodlerı görülmektedir. ToolBox Tasarım Alanı Solution Explorer Properties
  • 12. 12 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Resim 4: C# Dili İle ASP.Net Web Sayfası Tasarlama Visual Web Developer Web Server Nedir? Biraz önceki uygulamamızda F5 e bastıkdan sonra taskbarımızın üstünde bir baloncuk çıktı (Resim 5) Bu ifade web uygulamalarını geliştirmek için kullanılan local Web Server olup, IIS yapısının extra özelliklerini içermez. Önceleri IIS de ayarlama sorunları yaşadığımız olmuştur. .NET 2008 platformu kendi IIS ini çalıştırdığından IIS bazındaki sorunlar ortadan kalkmıştır. Resim 5: ASP.Net Development Server Evet artık ASP.Net uygulamalarımızı geliştirebiliriz. Bunu için açtığınız projenin çalışması durduğundan emin olun. Çalışma durumunu durdurmak için açılan internet Explorer penceresini kapatmak yeterli olacaktır. ASP.Net Kontrolleri
  • 13. 13 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Server Kontrol Nedir? Kullanıcı arabirimi veya diğer ilişkisel fonksiyonlar oluşturmak üzere Server üzerinde çalışan componentlere denir. Server kontroller runat= “server” özelliğine sahiptirler. (Resim 6) Resim 6: Server Kontrol Standart Kontroller ASP.NET ile web sitesi tasarımında html kontrolleri istenirse kullanılabilir. Fakat ASP kontrolleri gelişmiş özelliklere sahip olduğu için tercih edilir. En çok kullanılan ASP.NET kontrolleri aşağıda verilmiştir. Resim 7:Standart Kontroller
  • 14. 14 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Label: Sayfa üzerinde yazı yazmak için kullanılır. Normalde sayfa üzerine doğrudan da yazı yazılabilir. Fakat Label kontrolü kullanılırsa program kodları ile yazı yazdırılabilir. Properties penceresinden bazı özelliklerinin açıklaması ise; Textbox: Kullanıcıların bilgi girişi için kullanılan kontroldür. Özellikle üyelik kayıt, şifre doğrulamalarda yaygın olarak kullanılır. Properties penceresinden bazı özelliklerinin açıklaması ise; Button: Tüm windows uygulamalarında Tamam, Uygula, İptal vb. olarak gördüğümüz basma (click) özelliğine sahip kontroldür. Properties penceresinden bazı özelliklerinin açıklaması ise;
  • 15. 15 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 3) Butonumuzun üstünü çift tıklayarak Button1_Click özelliğine aşağıdaki kodu yazalım. protected void Button1_Click(object sender, EventArgs e) { Label1.Text = TextBox1.Text + "Merhaba Dünya..!"; } 4) Kodumuzu yazdıktan sonra çalıştıralım. Textbox’a ”ASP.Net İle” sonra butonu tıklayalım. Link Button: Bir çok özelliği butona benzeyen Link buttonu link vermek için kullanır. Click özelliğine kodumuzu yazarak yönlendirme yapabiliriz. Image Button: LinkButton ile işlevi aynıdır. Tek farkı Link yazısının yerine resim gelir. Resim getirmek için Properties penceresinden ImageURL seçeneğinden resmi belirleyebilirsiniz. 1 1) File>New>Web Site seçeneğini seçerek yeni bir web sitesi oluşturalım. 2) Web sitemize birer adet button, textbox ve label yerleştirelim.
  • 16. 16 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 4) Sonrasında Image Button’a çift tıklayın ve aşağıdaki kodu yazın. protected void ImageButton1_Click(object sender, ImageClickEventArgs e) { Response.Redirect("http://www.gokhanturan.com"); } Kodumuzu yazıp çalıştırdıktan sonra resmi tıkladığımızda web sayfası açılacaktır. HyperLink: Sayfa üzerinde linkler vermeye yarayan kontroldür. DropDownList: Açılan liste şeklinde seçim yapmak için kullanılır. Birden fazla seçeneğin sadece bir tanesinin seçilmesi durumunda kullanılır. Örneğin; Web sitelerin “İl ve İlçe” seçimleri gibi işlemlerde kullanılır. 2 1) File>New>Web Site seçeneğini seçerek yeni bir web sitesi oluşturalım. 2) Web sitemize Image Button ekleyin. 3) Image Button’un Properties’inden “ImageUrl” özelliğinden resim yolunu gösterin.
  • 17. 17 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 4) Add butonuna basarak DropDownList için elemanlar eklenir. Add dedikten sonra Text ve Value degerlerini girelim. 5) Text özelliğine yazdığımız değerler DropDownList de ekranda görünecektir. 3 1) Yeni bir Web Sayfası açalım. 2) Toolboxdan çalışma alanına DropDownList ekleyelim. 3) DropDownList’i seçtikden sonra Properties penceresinden Items seçeneğini tıklayınız. Karşımıza ListItems Collection Editor penceresi açılacaktır. 4 1) Yeni bir Web Sayfası açalım. 2) Toolboxdan çalışma alanına DropDownList ve Label ekleyelim. 3) DropDownList’i seçtikden sonra Properties penceresinden Items seçeneğini tıklayınız. Karşımıza ListItems Collection Editor penceresi açılacaktır. 4) Add butonuna basarak DropDownList için elemanlar eklenir. Add dedikten sonra Text ve Value degerlerini girelim.
  • 18. 18 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 5) Daha sonra DropDownList’i çift tıklayarak code‐behind alanına geçelim. 6) DropDownList’in SelectedIndexChanged olayına aşağıdaki kodumuzu yazalım. protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { Label1.Text = DropDownList1.SelectedItem.ToString(); } Listbox: Tüm özellikleri DropDownList ile aynısıdır. Tek fark karşımıza direk olarak liste şeklinde gelmesidir. Kodlama olarakda DropDownList de geçerli olan tüm kodlar ListBox içinde geçerlidir. Kodu çalıştırdığımızda, DropDownList’den seçmemize rağmen TextBox’a değer aktarılmayacaktır. ASP.Net sayfalarında bu özelliğin algılanması için, DropDownList1’in properties penceresinde bulunan AutoPostBack özelliğinin True olması gerekmektedir. 5 1) Yeni bir Web Sayfası açalım. 2) Toolboxdan çalışma alanına ListBox ve Label ekleyelim. 3) ListBox’u seçtikden sonra Properties penceresinden Items seçeneğini tıklayınız. Karşımıza ListItems Collection Editor penceresi açılacaktır. 4) Add butonuna basarak ListBox için elemanlar eklenir. Add dedikten sonra Text ve Value degerlerini girelim.
  • 19. 19 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 5) Daha sonra ListBox’u çift tıklayarak code‐behind alanına geçelim. 6) ListBox’un SelectedIndexChanged olayına aşağıdaki kodumuzu yazalım. protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) { int deger = Convert.ToInt32(this.ListBox1.SelectedItem.Value); Label1.Text = string.Format("{0:N} TL", deger); } Buradaki string.Format("{0:N} TL",deger) kısmı gönderdiğimiz değeri ayraç olarak ayarlayacaktır. Checkbox: Genel kullanımı bir formda birden fazla seçim yapmak için kullanılır. CheckBox nesnemizin ait özellikler aşağıdaki listede yer almaktadır.
  • 20. 20 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 5)CheckBox’larımızın Properties penceresinden Text özelliğini kullanarak değerlerini değiştirelim. 6) DropDownList’e items özelliğinden 4 isim girelim ve AutoPostBack özelliğini True yapalım. 7)Daha sonra DropDownList’i çift tıklayarak kod alanına geçelim. Aşağıdaki kodu ekleyelim. protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { if (this.DropDownList1.SelectedIndex == 0) { this.CheckBox1.Checked = true; this.CheckBox2.Checked = true; this.CheckBox3.Checked = true; this.CheckBox4.Checked = true; } else if (this.DropDownList1.SelectedIndex == 1) { this.CheckBox1.Checked = false; this.CheckBox2.Checked = true; this.CheckBox3.Checked = true; this.CheckBox4.Checked = false; } else if (this.DropDownList1.SelectedIndex == 2) { this.CheckBox1.Checked = false; this.CheckBox2.Checked = true; this.CheckBox3.Checked = false; this.CheckBox4.Checked = false; } else { this.CheckBox1.Checked = true; this.CheckBox2.Checked = false; this.CheckBox3.Checked = false; this.CheckBox4.Checked = true } 6 1) Yeni bir Web Sayfası açalım. 2) Toolboxdan çalışma alanına DropDownList ve 4 adet CheckBox ekleyelim. 3) DropDownList’i seçtikden sonra Properties penceresinden Items seçeneğini tıklayınız. Karşımıza ListItems Collection Editor penceresi açılacaktır. 4) Add butonuna basarak DropDownList için elemanlar eklenir. Add dedikten sonra Text ve Value degerlerini girelim.
  • 21. 21 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com } Kodu çalıştırdığımızda DropDownList’den bir isim seçelim. Seçtiğimiz ismin index numarasına göre CheckBox’lar işaretlenecektir. RadioButton: CheckBox’a benzer, tek farklılık bir grup ismi verilen radiobutton’lardan sadece bir tanesini seçme durumumuz olacaktır. protected void Button1_Click(object sender, EventArgs e) { string yazi = this.TextBox1.Text; if (this.RadioButton1.Checked == true) { Response.Write(yazi + " Cinsiyeti: Erkek"); } else 7 1) Yeni bir Web Sayfası açalım. 2) Toolboxdan çalışma alanına Label, TextBox, 2 adet RadioButton ve Button ekleyelim. 3) Aşağıda görüldüğü gibi Text değerlerini değiştirelim. 4)Tamam Butonuna çift tıklanarak içine girip aşağıdaki kodu yazalım.
  • 22. 22 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com { Response.Write(yazi + " Cinsiyeti: Kadın"); } } Burada Response.Write komutumuz ekrana yazmak için kullanılır. RadioButton1 eğer işaretlendi ise TextBoxdaki ismi alarak cinsiyetini ekrana yazacaktır. Checkboxlist: CheckBox’a benzer bir yapıya sahiptir. Listbox ile CheckBox’ın birleşmesi de denilebilir. CheckBoxlist’e ait özellikler aşağıdaki listede yer almıştır. Radiobuttonlist: RadioButton ile ListBox’ın birleşmiş hali diyebiliriz. Items özelliğinden seçenek ekleyebiliriz. Bu RadioButtonList listesinden sadece bir tane seçebiliriz. 1) Yeni bir Web Sayfası açalım. 2) Toolboxdan RadioButtonList ekleyerek Items özelliğinden sırasıyla Gökhan, Tülay, Turan isimlerini yazalım. 3) Daha sonra bir buton ekleyerek butonumuzun çift tıklayarak kod alanına geçelim.
  • 23. 23 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com protected void Button1_Click(object sender, EventArgs e) { if (this.RadioButtonList1.SelectedIndex == 0) { Response.Write(this.RadioButtonList1.SelectedValue + " Bilgi İşlem- Network"); } else if (this.RadioButtonList1.SelectedIndex == 1) { Response.Write(this.RadioButtonList1.SelectedValue + " Bilgi İşlem- Web/Grafik"); } else { Response.Write(this.RadioButtonList1.SelectedValue + " Bilgi İşlem- Yazılım"); } } 8
  • 24. 24 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Calendar: Ekrana bir takvim getirerek tarih bilgilerini almamızı sağlar. Ayrıca kullanıcıların tarih formatlarında hata yapmalarını engellemek amaçlı kullanılır. Calendar nesnemizin özellikleri aşağıdaki listede yer almaktadır. Calendar nesnemizin üstünden mouse ile sağ tuşa bastığınızda gelen menüden Auto Format seçeneğini seçiniz. Karşımıza gelen pencereden bize sunulmuş olan biçimlerden birini seçerek OK düğmesine basınız.
  • 25. 25 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com protected void Calendar1_SelectionChanged(object sender, EventArgs e) { TextBox1.Text = this.Calendar1.SelectedDate.ToShortDateString(); } Kodumuz yazıp çalıştırdıktan sonra Calendar nesnemizden seçtiğimiz tarihi TextBox’a aktaracaktır. 9 1) Yeni bir Web Sayfası açalım. 2) Toolboxdan Calendar ve TextBox Ekleyelim. 3) Daha sonra Calendar nesnemizi çift tıklayarak kod alanına geçelim ve kodumuzu yazalım.
  • 26. 26 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Multiview ‐ View: Kullanımı tab menuye benzeyen, oldukça kullanışlı olan Multiview ve View nesneleri beğeneceğinizi düşünüyorum. Multiview bilmemiz gerek bir ActiveViewIndex özelliği, hangi View nesnesinin görünmesini istiyorsak onun index değeriniz yazmamız gerekmektedir. Index numaraları “ 0 “ dan başlamaktadır. Eğer ‐1 değerini belirlersek ekranda hiçbir View görünmeyecektir. 4) Daha sonra MultiView’in üstüne 3 adet Link Button ekleyerek değerlerini değiştirelim. 5)View1, View2 ve View3 ün içerisine istediğiniz nesneleri ekleyebilir veya yazabilirsiniz. 10 1) Yeni bir Web Sayfası açalım. 2) Toolboxdan bir tane Multiview ekleyeyelim. 3) Daha sonra Multiview’in içerisine 3 adet alt alta View ekleyelim.
  • 27. 27 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 6) Daha sonra LinkButton’larımıza kodlarımızı yazarak çalıştıralım. Böylece hangi linki tıklarsak ona ait View görünecektir. protected void LinkButton1_Click(object sender, EventArgs e) { this.MultiView1.ActiveViewIndex = 0; } protected void LinkButton2_Click(object sender, EventArgs e) { this.MultiView1.ActiveViewIndex = 1; } protected void LinkButton3_Click(object sender, EventArgs e) { this.MultiView1.ActiveViewIndex = 2; }
  • 28. 28 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Validation Validation Kontroller Web sayfalarında en önemli bir konu halini alan bilgi girişi ve bunların kontrollerini yapan kontrollerdir. Kullanıcıların hatasız ve eksiksiz olarak formların doldurulmasında önemli rol oynamaktadır. Bu kontroller Javascript veya DHTML kullanılarak da yapılabiliyordu. Fakat Asp.NET 2.0 bize sunmuş olduğu bu validation sayesinde daha anlaşılır ve hızlı olmamızı sağlamaktadır. Bu kontrollerin çalışması için Internet Explorer 4 ve üstü olması gerekmektedir. Bu kontrolleri genel olarak tanımlayalım. Validationları daha iyi anlamak için uygulamalar yapalım. 11 1) Yeni bir Web Sayfası açalım. 2) Toolboxdan TextBox, Button ve RequiredFieldValidator kontrollerini ekleyeyim.
  • 29. 29 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 3) RequiredFieldValidator kontrolünü tıklayalım ve Properties penceresinden ErrorMessage özelliğini kullanarak hata mesajını “Bu alanı boş geçemezsiniz” olarak değiştirelim. Böylece kullanıcı hata yaptığında bu ileti çıkacaktır. 4) Daha sonra ControlToValidate özelliğinden TextBox1 i seçiniz ve kodumuzu çalıştırınız. Eğer TextBox’ı boş geçerek butona basarsanız hata çıkacaktır. Fakat TextBox’ımıza birşeyler yazıp butona bastığımızda hata mesajı kaybolacaktır. 4) Daha sonra yine RangeValidator kontrolünün MinimumValue özelliğine “0”, MaksimumValue özelliğine ise “100” değerlerini yazınız. 5) Değerleri girdikten sonra CompareToValidate seçeneğinden Textbox objenizi seçiniz. Seçtikten sonra kodumuzu çalıştıralım ve textbox a “200” gibi büyük bir rakam girelim. RangeValidation hata verecektir. Eğer siz aralık olarak iki tarih aralığı belirlemek istiyorsanız Range Validation’nın Type özelliğini Date yapmanız gerekmektedir. 12 1) Yeni bir Web Sayfası açalım. 2) Toolboxdan TextBox, Button ve RangeValidator kontrollerini ekleyeyim. 3) RangeValidator kontrolü tıklayarak properties penceresinden ErrorMessage kısmına “0 ile 100 arası bir sayı giriniz” mesajını yazınız.
  • 30. 30 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 4) Properties penceresinde bulunan ValidationExpression seçeneğinin tıkladığınızda karşımıza Regular Expression Editor penceresi gelecektir. Gelen seçeneklerden telefon numarası, e‐mail, web adresi,posta kodu gibi hazır kalıplar içermektedir. Biz be seçeneklerden Internet e‐mail address seçeneğini seçiniz. 5)Burada textbox’a bilgi girişi yapıldığında “@” ve “ . ” işaretlerini kontrol edecektir. Kalıp değerler dışında kendimize göre giriş karakter kontrolü yaptırabiliriz. Regular Expression Editor penceresinde üstte Custom seçeneğini işaretleyerek Validation expression alana ifadeleri yazınız. Karakterleri aşağıdaki tabloda inceleyebilirisiniz. 13 1) Yeni bir Web Sayfası açalım. 2) Toolboxdan TextBox, Button ve RegularExpressionValidator kontrollerini ekleyeyim. 3) RegularExpressionValidator kontrolüne ait properties penceresinden ErrorMessage kısmına “Yanlış E‐Mail” yazısını, ContolToValidate seçeneğinden de TextBox1’i seçiniz.
  • 31. 31 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Bunların dışında sizlere bir kaç regular expressionlar yazılır. 4)Daha sonra kodumuzu çalıştıralım. Textbox1’e ve Textbox2 kontrollerine aynı değerleri yazmamız gerekmektedir. Buradaki seçeneklerden ControlToCompare seçeneğinde TextBox1’i seçtiğimiz için kontrol bu nesne üzerinden olmaktadır. Kontrolleri kullanarak Web formlarımızda kullanıcı hatalarını büyük oranda engelleyerek doğru bilgilerin gönderilmesini sağlayabiliriz. 14 1) Yeni bir Web Sayfası açalım. 2) Toolboxdan 2 TextBox, Button ve CompareValidator kontrollerini ekleyeyim. 3) CompareValidator kontrolünün properties penceresinde ErrorMessage yazısını “Aynı Değerler Giriniz” olarak değiştiriniz. Daha sonra ControlToCompare seçeneğinde textbox1’i, ControlToValidate seçeneğinde ise textbox2’i seçiniz.
  • 32. 32 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 4)Amacımız DropDownList’te seçinlen resim Image İçinde gözükmesidir. DropDownList’in Item değerleri yazılır ve içine girilerek aşağıdaki kodlar yazılır. protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { if (DropDownList1.SelectedIndex==1) { Image1.ImageUrl = "~/1.jpg"; } else if (DropDownList1.SelectedIndex == 2) { Image1.ImageUrl = "~/2.jpg"; } if (DropDownList1.SelectedIndex == 3) { Image1.ImageUrl = "~/3.jpg"; } if (DropDownList1.SelectedIndex == 4) { Image1.ImageUrl = "~/4.jpg"; } } 15 1)Yeni bir Web Sayfası açalım. 2)Toolboxdan DropDownlist ve Image ekleyelim. 3)Image içine çağıracağımız 4 adet resmi açtığımız web sayfasının bulunduğu klasöre atalım. 16 1)Yeni bir Web Sayfası açalım. 2)Toolboxdan DropDownlist ekleyelim.
  • 33. 33 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 3)Projeye 2 tane Webform ekleyin.( Ekranda sagda solution Explorer penceresinde projenin adresi ve adının yazdıgı yere sağ click yapıp add new ıtem tıklandıgında açılan pencerede web form tıklandıgında solution Explorer a eklenmis olucaktır.) 4) DropDownlist’in üstüne double click yapın ve aşağıdaki kodları yazın. protected void DropDownList1_SelectedIndexChanged1(object sender, EventArgs e) { if (DropDownList1.SelectedIndex == 1) { Response.Redirect("~/Default2.aspx"); } else if (DropDownList1.SelectedIndex == 2) { Response.Redirect("~/Default3.aspx"); } } İşlemler bittikten sonra f5 e basıldıgında sayfa görüntüsü bu şekilde olacaktır ve DropDownlist ten seçilen sayfa açılıcaktır.
  • 34. 34 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 3) DropDownlist in propertius’unda items özelliğinden gerekli itemlerı ekleyelim. 4) DropDownlist in üstünde çift tıklayalım ve aşağıdaki kodları yazalım. protected void DropDownList1_SelectedIndexChanged1(object sender, EventArgs e) { int sayi1 = Convert.ToInt16(TextBox1.Text); int sayi2 = Convert.ToInt16(TextBox2.Text); int sonuc = 0; if (DropDownList1.SelectedIndex == 1) { sonuc = sayi1 + sayi2; } else if (DropDownList1.SelectedIndex == 2) { sonuc = sayi1 - sayi2; } else if (DropDownList1.SelectedIndex == 3) { sonuc = sayi1 * sayi2; } else if (DropDownList1.SelectedIndex == 4) { sonuc = sayi1 / sayi2; } Label1.Text = Convert.ToString(sonuc); } 17 1)Yeni bir Web Sayfası açalım. 2)Toolboxdan DropDownlist , 2 tane TextBox ve Label ekleyin.
  • 35. 35 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Sayfalar Arası Veri Aktarımı Web sitelerinin çalışma şeklinde Sunucu ve istemci vardır. İstemci sunucudan sayfayı istemektedir. İstemcide sunucunun göndermiş olduğu sayfa görüntülenmektedir. Burada girilecek veya tanımlanacak bir bilgi istemcide tanımlanır. Bundan sunucunun haberi olmaz. Bir linke tıklanarak diğer sayfaya geçildiğinde tüm tanımlamalar istemcide bulunduğu için sunucu, istemcideki tanımlara göre işlem yapamaz. Fakat yapılan tanımlamaların diğer sayfalara aktarılması ve diğer sayfalarda kullanılması gerekir. Bu işlemi web sitelerinde gerçekleştirmek için değişik yöntemler kullanılmaktadır. 1- Web sayfasındaki formu Post metodu ile diğer sayfaya göndermek ve Request.Form ile değerleri almak. 2- Web sayfalarını çağırırken adres satırında parametre gönderme, RequestQuerystring kullanma. 3- Cokie kullanma 4- Application nesnesinde değişken tanımlama 5- Session nesnesinde değişken tanımlama Web ortamında sayfaların her post-back olmasında ilgili sayfanın yeni bir örneği oluşturulur. Peki, yeni bir örneğinin oluşması ne demek? 1.Sayfamızdaki bilgilerin 2.Sayfadaki kontrollerin (TextBox, Grid, CheckBox, Button vb.) tamamen kaybolması demektir. Örneğin kullanıcı sayfamızdaki bir TextBox’a veri girdiğinde, artık biliyoruz ki bu veri tamamen kaybolacaktır. Ancak bunu deneyip yaptığımızda gerçek ortamda TextBox’taki verinin kaybolmadığını görüyoruz. Peki, bu nasıl oluyor? Geleneksel Web Programlamanın bu sınırlılığının üstesinden gelmek için .NET platformu bize bazı sayfa-tabanlı ve uygulama-tabanlı seçenekleri sunmakta. Bunlar: 1.View State 2.Control State 3.Hidden Fields 4.Cookies 5.Query Strings 6.Application State 7.Session State Bu seçeneklerden (View State, Control State, Hidden Fields, Cookies ve Query Strings) sayfamızdaki bilgileri ve kontrol bilgileri bir takım yollarla kullanıcının kendi bilgisayarında (Client-Based State Manegement) saklarlar. Geri kalan seçenekler ise (Application State, Session State ve Profile Property) bu bilgileri uygulama tarafında yani sunucuda (Server-Based State Management) saklarlar. .NET platformunun bizlere sunduğu bu seçenekleri incelersek:
  • 36. 36 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com View State Post-Back sırasında default olarak sayfa ve kontrol bilgilerini tutan bu yapı, dictionary mantığıyla çalışır. Her bir kontrolün ve sayfa bilgisinin değerleri “Key”, “Value” şeklinde, hidden field’lar olarak korunur. Sayfa sunucuya gönderildiğinde, gelen isteğe göre işlem yapıldıktan sonra sunucu view-state değerine göre sayfayı tekrardan render eder ve client’a tekrar gönderir. Böylece sayfamızdaki verilerimizi kaybetmemiş ve sunucuya gitmeden önceki halleriyle tekrar tarayıcımızda görürüz. View state yapısında kendi verilerimizi de saklayabiliriz. Dictionary mantığıyla çalıştığını daha önce belirtmiştik. Aşağıdaki gibi basit bir şekilde View State yapısını kullanabilirsiniz View State e veri ekleme: ViewState.Add(”[Key]“,”[Value]“); Eklenen bir veriyi alma: ViewState["[Key]“].ToString(); Bu yöntemi kullanmanın avantajları: 1.Sunucu kaynaklarını yormaz: Client-Based olduğu için sunucumuza artı bir yük getirmez 2.Kolay uygulanabilirlik: Ekstra kodlama gerektirmez. Zaten default olarak kullanılan metoddur 3.Güvenlik: View-State değerleri şifrelenmiş bir şekilde saklandıkları için Hidden field’lara göre daha güvenlidirler Dezavantajları: 1.Performans düşüklüğü: View-State değerleri sayfamızla beraber sunucuya gittiği için view-state de büyük boyutta veri saklamak sunucuya gidiş-geliş süresini uzatacaktır. özellikle mobil uygulamalarda büyük veriler büyük performans kaybı demektir. 2.Potansiyel Güvenlik Riski: Veriler şifrelenmiş bir şekilde saklansa bile sayfa kaynağını görüntülediğimizde bu verileri şifreli halde bile olsa görebiliriz. Bu durum güvenlik riski oluşturabilir. Control State .NET ControlState özelliği post-back’ler arasında custom kontrol verilerini tutmamıza olanak sağlar. Örneğin sayfamızda farklı içerikler gösteren farklı tab yapılarımızın olduğunu düşünün. Hangi tabın seçili olduğunu post-back işleminden önce bilmek istiyorsak bu yapı uygun bir yapıdır. Bu senaryo ViewState ile de yapılabilir, ancak ViewState sayfa bazında kapatılabildiği için uygulamamızda aksaklıklara neden olabilir. ControlState ise ViewState gibi kapatılamaz. peki nasıl kullanılır? Veri ekleme: PageStatePersister.ControlState = “[Data]”; Veri alma: string value = PageStatePersister.ControlState.ToString(); Kullanım Avantajları: 1.Sunucu kaynaklarını yormaz: Client-Based olduğu için sunucumuza artı bir yük getirmez
  • 37. 37 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 2.Güvenilirlik: ViewState gibi kapatılamadığından kullanımı daha kesin sonuçlar verir. 3.Çok Yönlülük: Control state tekli verilerin nasıl ve nerede saklanması konusunda custom adaptörler yazılabilir Dezavantajları: 1.Programlama bilgisi gerektirir: ASP.NET kullanım için limitli imkan sağlasa da, tam kullanım için kodlama gerektirmektedir. Hidden Fields Hemen hemen hepimizin bildiği bir state yönetim aracıdır. Normal bir HTML kontrolü olarak sayfamıza ekleyebilirsiniz. Veri saklama ve veri alma, normal bir TextBox’tan farksızdır. Kullanım avantajları: 1.Sunucu kaynaklarını yormaz: Client-Based olduğu için sunucumuza artı bir yük getirmez 2.Yaygın Destek: Hemen hemen tüm tarayıcılar hidden field desteği vermektedir. 3.Kullanım kolaylığı: Standart HTML kontrolü olarak sayfanıza ekleyebilirsiniz. Dezavantajları: 1.Güvenlik Riski: Sayfa kaynağı direkt olarak görüntülenirse hidden field değerleri açıkça görülebilir. Değerler şifrelenebilir ancak şifrelenmesi ve şifrelerin tekrar çözülmesi işlemi ekstra kodlama demektir. 2.Basit Depolama Mantığı: Hidden field’larda rich değerler saklayamayız. Daha çok basit veriler saklanması için tasarlanmıştır. 3.Performans Kaybı: Büyük veriler saklayamadığımız gibi, aşırı kullanımı durumunda sayfada HTML kontrolü olarak saklandığı için performans kayıplarına neden olacaktır Cookies (Çerezler) //myCookie isminde yeni nesne oluştur HttpCookie MyCookie = new HttpCookie("SonZiyaret"); //now isminde datetime tipinde nesne oluşturup o anki zaman aktar DateTime now = DateTime.Now; //myCookie’nin değeri belirleniyor MyCookie.Value = now.ToString(); //myCookie’nin süresi belirleniyor. Ömrü 1 saat olarak ayarlanıyor MyCookie.Expires = now.AddHours(1); //myCookie istemci bilgisayara ekleniyor. Response.Cookies.Add(MyCookie); Cookie Okuma HttpCookie myCookie = Request.Cookies.Get("SonZiyaret"); degisken = myCookie.Value;
  • 38. 38 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Kullanım Avantajları: 1.Konfigüre Edilebilme: Cookie’lerin ayarlanabilir birçok özelliği vardır. İsim, değer, zaman aşımı süresi vb. 2.Sunucu kaynaklarını yormaz: Client-Based olduğu için sunucumuza artı bir yük getirmez 3.Veri Devamlılığı: Client bilgisayarlarda veri bütünlülüğünü en yüksek oranda garanti edebilen yapılardır. 4.Kullanım kolaylığı: text tabanlı key-value mantığıyla çalışırlar Dezavantajları: 1.Boyut limiti: Bir çok browser cookie boyutu olarak 4096 byte sınırını getirmektedir. 2.Kullanıcı Kontrolü: Bazı kullanıcılar cookie alımını tarayıcılarından kapatabilirler, bu da cookie kullanımını olanaksız hale getirir 3.Güvenlik Riski: Cookie kullanıcılar tarafından görülebilmektedir. Bu da güvenlik açıklarına neden olabilir. Cookie değerleri manuel olarak şifrelenebilir, ancak bu da ekstra kod demektir. protected void Button1_Click(object sender, EventArgs e) { HttpCookie cerez = new HttpCookie("KullaniciBilgileri"); cerez["KullaniciAdi"] = "msabrikunt"; cerez["Sifre"] = "123456"; cerez["Gecerlilik"] = "5 Gün"; cerez.Expires = DateTime.Now.AddDays(5); Response.Cookies.Add(cerez); } 17 1)Yeni bir Web Sayfası açalım. 2)Toolboxdan Button ekleyelim. 3)Button’un Click olayına aşağıdaki kodu yazalım.
  • 39. 39 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Çerez Kaydet İçine şu kodları yazalım. protected void Button1_Click(object sender, EventArgs e) { // Cookie oluştur. HttpCookie cookie_isim = new HttpCookie("Uygulama"); // Formdan Gelen Bilgileri Anahtarlara Yaz. cookie_isim["kullanici_adi"] = TextBox1.Text; cookie_isim["sifre"]=TextBox2.Text; // Cookienin Bitiş Süresi. 18 1)Yeni bir Web Sayfası açalım. 2)Toolboxdan 2 Button, 6 Label, 2 TextBox ekleyelim. 3)Button’un Click olayına aşağıdaki kodu yazalım.
  • 40. 40 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com cookie_isim.Expires=DateTime.Now.AddHours(1); // Cookieyi Kaydet. Response.Cookies.Add(cookie_isim); } Çerez Oku İçine şu kodları yazalım. protected void Button2_Click(object sender, EventArgs e) { // Cookieyi Al. HttpCookie cookie_isim = Request.Cookies["Uygulama"]; //Cookiedeki Değerlerle Formu Doldur. Label5.Text = cookie_isim["kullanici_adi"]; Label6.Text = cookie_isim["sifre"]; } Sayfayı kapatıp açtığımızda da Çerez okuyu tıklasak yine o değerleri okuruz. Çünkü çerez ömrü 1 saat verilmiş. QueryStrings QueryString’lerde yine en çok aşina olduğumuz state yönetim araçlarındandır. URL’lerin ardına eklenen kullanıcılar için çok da bir anlam ifade etmeyen, yazılımcılar için anlamlı bilgilerdir. Örneğin: xyz/index.php?option=com_comprofiler&task=userProfile&user=142 adresindeki “?” işaretinden sonra gelen “option”, “task” ve “user” kelimeleri birer Query String anahtarlarıdır. Bu anahtarlar kullanıcılar için fazla bir anlam ifade etmez ancak yazılımcılar için çok anlamlıdırlar. Kullanımı:
  • 41. 41 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com xyzindex.php?option=com_comprofiler Her iki kullanımda aynı işi görmektedir. Veri Alma: if (Request["[Key]“] != null) { string value = Request["[Key]“].ToString(); } Kullanım Avantajları: 1. Sunucu kaynaklarını yormaz: Client-Based olduğu için sunucumuza artı bir yük getirmez 2. Yaygın Destek: Hemen hemen tüm tarayıcıların Query String iler veri taşıma desteği vardır. Dezavantajları: 1. Güvenlik Riski: Query String ile taşınan veriler clear text olarak tüm kullanıcılar tarafından görülebilmektedir. Bu nedenle değerli veriler kesinlikle querystring ile taşınmamalıdır. Bunun yerine Hidden field veya diğer yapılar kullanılabilir. 2. Kapasite Limiti: Bazı tarayıcılar URL uzunluklarını en fazla 2083 karakter olarak sınırladıklarından istenilen uzunlukta veri taşınamıyor. protected void Button1_Click(object sender, EventArgs e) { Response.Redirect("default2.aspx?AD=Gokhan&SOYAD=TURAN"); } 19 1)Yeni bir Web Sayfası açalım. İki adet sayfamız olsun. (Default,Default2) 2)Toolboxdan birinci sayfaya 1 Button ekleyeyim. 3)Button’un Click olayına aşağıdaki kodu yazalım.
  • 42. 42 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Default2.aspx sayfasına 1 adet Label ekleyerek aşağıdaki kodu ekleyelim. protected void Page_Load(object sender, EventArgs e) { string isim = Request.QueryString["AD"]; string soyisim = Request.QueryString["SOYAD"]; Label1.Text = isim + soyisim; } Application/Uygulama Asp'yi yazanlar ASP teknolojisinin kullanıldığı bir siteyi uygulama programı olarak düşünmüşler ve bu siteye girecek herhangi biri ziyaretçiyi de bu programı kullanan bir kullanıcı olarak düşünmüşler. Yani sitenize her bir kullanıcı girdiğinde bir onun için bir program açılıyor gibi düşünülebilir. Web sitemiz sunucuya yüklendiğinde bir Application (uygulama) çalışır. Web sunucu kapatılana kadar bu uygulama çalışır. Bu uygulama kapatılana kadar değişkenler saklanmaktarı. Sunucu taraflı veri saklama yöntemidir. ASP.NET’te Application nesnesinde tanımlanan bir değişkeni ve değerini tüm ziyaretçiler görür. Application’da tanımlanan değişkenin ömrü, Web sunucunun çalışma süresi kadardır. Web sunucu durduğunda Application değişkenleri silinir. Application değişken tanımlama Application.Add("Okul", TextBox1.Text); Application değişken değerlerini okuma degisken = Application["Okul"].ToString();
  • 43. 43 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Session/Oturum Bu nesne Application nesnesi ile en çok karıştırılan nesnedir. Çünkü ikisi de tanımlamalarda aynı özellikleri taşır. Session Oturum demektir. Web Sitesine her bağlanan kişi için Application’da bir oturum oluşturulur. Session belirli bir süre için oluşturulur. Bu süre varsayılan olarak 20 dakikadır. Her istemci için ayrı ayrı oluşturulan session o istemci bağlantısını kesene kadar veya session ile ilgili hiçbir işlem yapmadan 20 dakika geçtiğinde hafızadan silinir. Dolayısıyla session’da tanımlanan bir değişkene sadece o oturumu başlatan kişi oturum açık kaldığı sürece ulaşabilir. Session sunucu taraflı çalışan bir sistemdir. Bu nedenle değişkenler sunucuda saklanır. Session’da değişken oluşturma: Session.Add("Yetki", 3); Oluşan oturumda (Session) Yetki isminde bir değişken oluşturulur ve 3 değeri bu değişkene aktarılır. Daha sonra web sitemizin herhangi bir sayfasında bu değeri okuyabiliriz. degisken = Session["Yetki"]; Session süresinin belirlenmesi Session nesnesi varsayılan olarak 20 dakika için oluşturur. İstemci web sitesinden istekte bulunmaya devam ettiği sürece oturum kapatılmaz. Eğer istemci 20 dakika herhangi bir işlem yapmaz ise oturum kapatılır. Oturumun sona ereceği süre aşağıdaki örnekteki gibi dakika cinsinden verilebilir. Session.Timeout = 30; Tüm session nesnelerinin değerini sıfırlama Sitemizde öyle bir an olur ki session nesnelerine yüklediğimiz tüm verileri bir defada silmek isteyebiliriz. Session.Abandon(); protected void Page_Load(object sender, EventArgs e) { string sayfa_id = Request.QueryString["sayfa"]; if (Session[sayfa_id] == null) { Label1.Text = "Sayfayı ilk kez okuyorsunuz."; Session[sayfa_id] = "okundu"; } else { 20 1)Yeni bir Web Sayfası açalım. 2)Toolboxdan sayfaya 1 Label ekleyeyim. 3)Sayfanın Load olayına aşağıdaki kodu yazalım.
  • 44. 44 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Label1.Text = "Daha önce bu sayfayı okumuşsunuz."; } } F5 ile sayfanın ön izlemesini görelim. Karşımıza aşağıdaki sayfa gelecektir. Bu sayfada iken Sayfayı güncelleyelim. (F5 ile) Aşağıdaki pencere karşımıza gelecektir. ASP.NET Kavramlar Request/Talep Adından anlaşabileceği gibi veri talep etmek için kullanılır. Gerek formlarda, gerek sorgulardan gerekse cookie’lerden verileri almak için kullanırız. Kısaca İstemciden veri almak için kullanılır. Bu nesne ile kullanıcıdan birçok şekillerde veri alabiliriz. Tabi bunun için Request nesnesinin metotlarını kullanacağız. Şimdi bunları görelim. 1. Request.Form: Kullanıcının doldurduğu herhangi bir form öğesinden veri almak için kullanılır. Aldığınız bu veriyi sayfanızda herhangi bir yerde kullanabilirsiniz. Degisken = Request.Form("form_oge_adi"); şeklinde veriyi alabilir ve bir değişkene atayabilirsiniz. Not: Yukarıdaki örnekte bulunan form_oge_adi denen isim formdaki öğenin adıdır. 2. Request.QueryString: sayfa.aspx?degisken=deger gibi bir url’deki değişken adlı değişkenin değerini almada kullanılır. Degisken = Request.QueryString("degisken_adi"); şeklinde veriyi alabilir ve Request.Form'daki gibi bir değişkene atanabilir. Eğer birden fazla değişken url ile yollanacak ise sayfa.asp?degisken1=deger&degisken2=deger şeklinde yollanıp yukarıdaki gibi alınabilir. 3. Request.ServerVariables: Server değişkenlerinden veri alma. Hep kullanıcıdan değil de bazen sunucudan veri almamız gerekir, mesela o sırada çalışan asp sayfasının adresini buradan alabilirsiniz. Request.ServerVariables("degisken_adi") şeklinde bir kod ile değeri alabilirsiniz ve bir değişkene yükleyebilirsiniz. degisken_adi adlı bölümde aşağıdaki değerler kullanılabilir.
  • 45. 45 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Değişken Açıklamalar ALL_HTTP İstemci tarafından gönderilen http Header altında yer alan tüm değişkenler ve değerlerini getirir. ALL_RAW http Header altında yer alan tüm değişkenler ve değerlerini getirir. Başlarında http öneki olmaz. APPL_MD_PATH Uygulamanın Metabase yolunu verir APPL_PHYSICAL_PATH Uygulamanın fiziksel yolunu verir AUTH_PASSWORD Kullanıcı sunucuya basit yetkilendirmeyle bağlanıyorsa parolayı getirir. Bu değişken yalnızca Temel kimlik doğrulama kullanılır kullanılabilir. AUTH_TYPE Auth_type Yetkilendirme metodunu getirir. AUTH_USER Kullanıcı sunucuya basit yetkilendirmeyle bağlanıyorsa adını getirir. CACHE_URL ISAPI uygulamalarda kullanmak için. CERT_COOKIE Bağlantıda yetkilendirme sertifikası kullanıyorsa kendisine verilen kimlik. CERT_FLAGS Kullanıcının sertifikası varsa bu değer 1 olur. CERT_ISSUER sertifikası varsa veren kurum(O = MS, OU = IAS, CN = kullanıcı adı, C = USA). CERT_KEYSIZE Güvenli Yuva Katmanı (SSL) içinde bit sayısı bağlantı anahtar boyutu. Örneğin, 128. CERT_SECRETKEYSIZE SSL’deki deki özel anahtarın bit sayısı. Örneğin, 1024. CERT_SERIALNUMBER Istemci sertifikası seri numarası CERT_SERVER_ISSUER Sunucu sertifikasının alındığı yer CERT_SERVER_SUBJECT Sunucu sertifikasının Konu alanı. CERT_SUBJECT Istemci sertifikanın Konu alanı. CONTENT_LENGTH Müşteri tarafından verilen içerik boyutu. CONTENT_TYPE Içerik veri türü. Gelen bilgilerin GET veya POST metoduna göre türünü gösterir. GATEWAY_INTERFACE Sunucunun kullandığı CGI tipi ve sürümü. HEADER_ <HeaderName> Değeri başlık <HeaderName> saklanır. Herhangi bir başlık bu tabloda listelenen başka ServerVariables koleksiyonu için sırayla "HEADER_" tarafından değeri önünde olmalıdır. HTTP_ <HeaderName> Değeri başlık <HeaderName> saklanır. Herhangi bir başlık bu bu tabloda listelenen başka ServerVariables koleksiyonu için sırayla "HTTP_" tarafından değeri önünde olmalıdır.
  • 46. 46 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com HTTP_ACCEPT Kabul biçimlerinin bir listesini içerir Kabul başlığı döndürür. HTTP_ACCEPT_ENCODING Kabul kodlama türleri döndürür. HTTP_ACCEPT_LANGUAGE Bir dize içeriğinin görüntülenmesi için kullanılacak dil. HTTP_CONNECTION Bir dizenin bağlantı türü. HTTP_COOKIE Bu sitenin içerdiği İade çerez. HTTP_HOST Web sunucusunun adını verir HTTP_REFERER geçerli sayfayı bir HTML <a> etiketi kullanarak Döndürür HTTP_URL URL’nin kodlanmış şeklini verir, örneğin, "/ vdir / default.asp? QueryString". HTTP_VERSION Adı ve istek SERVER_PROTOCOL protokolü üzerinden (ham formu) sürümü. HTTPS Ziyaretçi ile bağlantının güvenli olup olmadığını gösterir. HTTPS_KEYSIZE SSL bağlantısı içinde bit sayısı Örneğin, 128. HTTPS_SECRETKEYSIZE Sunucu sertifikası private key deki bit sayısı. Örneğin, 1024. HTTPS_SERVER_ISSUER Sunucu sertifikasının Issuer alan. HTTPS_SERVER_SUBJECT Sunucu sertifikasının Konu alanı. INSTANCE_ID Sunucunun aynı andaki çalışma sayısı. INSTANCE_META_PATH Sunucunun çalıştığı meta yolu. LOCAL_ADDR İstemcinin IP numarası. LOGON_USER İstemcinin kendi sistemindeki oturum açma adı. PATH_INFO Çalışan sayfanın yolu veya adı. PATH_TRANSLATED Çalışan sayfanın uzun yolu veya adı. QUERY_STRING Adres satırında Query string kısmını verir REMOTE_ADDR Bu istemcinin IP adresini verir. REMOTE_HOST Bu istemcinin bilgisayarın adını verir REMOTE_PORT TCP bağlantısının istemci bağlantı noktası numarası. REMOTE_USER İstemcinin gerçek adı. REQUEST_METHOD Verilerin elde edildiği metot. SCRIPT_NAME ASPX sayfasının URL’deki adı. SERVER_NAME Sunucunun ana bilgisayar adı. SERVER_PORT İstekte bulunurken kullanılan port numarası.
  • 47. 47 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com SERVER_PORT_SECURE Portun güvenliliğini gösterir. Güvenli ise 1 değilse 0. SERVER_PROTOCOL Sunucudaki http’nin sürümü. SERVER_SOFTWARE Web sunucusun adı ve sürümü. URL Aktif olan URL’yi gösterir. Response/Karşılık Ziyaretçinin browser’ına gönderilen verilerin hepsini kapsar. Ayrıca cookie’lerde Response öğesinin özellikleri arasında yer alır. Kısaca bu nesne ile istemciye veri yollarız. Response nesnesini en çok ziyaretçinin tarayıcısına bir şey yazdırmak için kullanırız. Tabii sadece bu değil bu nesne ile web sayfamızın birçok özelliğini belirleriz. Response nesnesini sadece bu haliyle kullanmayız bu nesneyi de birçok ASP kodunda olduğu gibi "." yazıp sonra özelliğini yazarız. Şimdi bunların neler olduğunu ve ne işe yaradığını görelim. Write (Yazdır): Response nesnesinin en çok kullandığımız özelliğidir. Bu kodu ziyaretçinin ekranına bir şeyler yazdırmakta kullanırız. Response.Write("Yazı yazdırıyoruz"); Buffer (Tampon): Bu özellik "TRUE" olarak ayarlandığında asp sayfasının tüm kodlarının yorumlanması bitmeden tarayıcıya çıktı yollanmasını engeller. Bu sayede çok işlem gerektiren sayfalar bu yöntem ile tamamen yorumlanınca çıktısı tarayıcıya yollanır. Veya sizin asp sayfanız yorumlanması bitince ziyaretçiyi başka bir siteye yolluyor bunun için tüm kodların önce yorumlanması gerekir o zamanda bu özellik işinize yarayacak. Response.Buffer = true; Flush (Hemen Gönder) : Kısaca Buffer özelliğinin tam tersi bir işlem yapar. Sayfa yorumlandıkça çıktı tarayıcıya yollanır. Response.Flush Clear (Temizle) : Buffer özelliğini kullandığınız zaman sayfa yorumlanır, yorumlanan kısım geçici bir alanda tutulur. Clear özelliği ile de bu alandaki tüm veri silinir. Ama bu özellik neden işimize yarayabilir? Sitemizde alışveriş yapan bir kullanıcı, vazgeçtiği zaman verdiği bütün bilgileri silmek en iyisidir. O zamanda bu özellik yardımımıza koşacaktır Response.Clear(); Expires (Süresi Geçme): Bir internet sitesine girdiğiniz zaman tarayıcımız bu sitedeki resimleri ve kodları cache denen (bilgisayarımızdaki Temporary Internet Files klasörü) bir alanda tutar. Böylece daha sonra siz bu siteye tekrar girmek istediğinizde tarayıcı sayfayı buradan yükler. Ama kullanıcılar gidip buradan sayfanızın kodlarını görebilir ve bizim asp sayfamızda önemli kodlar olabilir veya bazı şifreler bu sayfada tutuluyor olabilir, o zaman bu sayfanın cache'e alınması pekiyi olmaz. Veya sitemiz çok sık yenileniyor ise kullanıcı eski halini görüyor olacak. Bunun için biz bu özelliği kullanarak sayfamızın cache'te ne kadar tutulacağını belirleyebiliriz. Response.Expires=10; Buradaki 10 dakika olacaktır. Bu sayıyı 0 yaparsanız hiç cache'e alınmaz.
  • 48. 48 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com End (Son): Sayfamızda belli durumlar sonucunda kullanıcıya karşılık vermemesini (yani küsmesini ) sağlayabiliriz. Bu durumda o ana kadar yorumlanan bütün kodlar tarayıcıya ulaşır ve ondan sonraki hiçbir kod yorumlanmaz, buna HTML de dâhil. Ayrıca bu özellik ile Buffer özelliğiyle geçici alanda tutulan tüm veri ziyaretçinin tarayıcısı ile buluşur. Response.End MasterPage Normal web formuna benzer. Kodlaması ile tamamen aspx sayfalarda yaptığımız işlemleri yapabiliriz. Direk çalıştırmak dışında aspx de yaptığımız tasarımları da yapabiliriz. Master page’i anlamak için söyle anlatılabilir. Bir web sayfamız var ve sitemizin sol menü, üst banner gibi sayfanın belli kalıpları sabittir. Bu sabitleri bir kere tasarlayarak ya da kodlayarak tüm sayfalarda kullanmamızı sağlayacaktır. Öncelikte masterpage’i tasarlayıp daha sonrasında kodlamaya geçmek daha uygun olacaktır. Masterpage oluşturmak için Web Site > Add New Item seçeneğinden Masterpage eklenebilir. Dosyamızın uzantısı master türündedir. Master pagede düzenleme yaparken sizlere tavsiyem table objelerinin içerisinde çalışmaktır. Böylece sayfada kayma ya da biçim bozukluğu olmayacaktır. Tabloların içerisine ContentPlaceHolder nesnesi eklememiz gerekmektedir. Öncelikle işlemlerin düzgün olması için bir tasarım yapılması gerekmektedir. Masterpage sayfasını açtığımızda design kısmında bir tane ContentPlaceHolder gelmiş olacaktır. Biz baksa bir tane eklemek istediğimizde ContentPlaceHolder’ı Toolbox penceresinden tasarım alanına sürüklemeniz yeterli olacaktır.
  • 49. 49 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Tablo oluşturduktan sonra ContentPlaceHolder’ları tablonun içerisine sürüklememiz yeterli olacaktır. 3) Masterpage’i yaptıkdan sonra buna bağlı sayfalar yapmak için Solution Explorerda Ana.Master dosyamızı sağ tıklayalı, gelen menüden Add Content Page seçeneğini seçelim. 21 1)Yeni bir Web Sayfası açalım. Bir adet de Master Page ekleyip adını “Ana” koyalım. 2) MasterPage içerisine tasarım için gerekli tablo düzeneğini oluşturalım.
  • 50. 50 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 4) Add Content Page seçeneğini tıkladığınızda otomatik olarak bir web sayfası oluşacaktır. Oluşturduğumuz web sayfasının Design kısmına geçtiğimizde Ana.Master sayfasının kalıbının geldiği göreceksiniz. Bu şekilde sayfalar üreterek ana kalıp üzerinden sayfalar yapabiliriz. Web User Control Web User Controlleri bir nevi diğer web programlama dillerindeki include dosyalar gibi düşünebilirsiniz. Oluşturduğunuz bir Web User Controlü sayfanızın isteğiniz yerine koyar ve orada onun görünmesini sağlayabilirsiniz. Oluşturulan bir web user control birçok defa aynı veya farklı sayfalarda kullanılabilir.
  • 51. 51 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Özellikleri Web user controller proje içerisinde oluşturulan ascx uzantılı dosyalardır. Bu dosyalar içerisinde daha önceden var olan HTML ve server componentlerini istediğimiz gibi kullanarak yeni bir görünüm oluştururuz. User Controller VS.NET toolbox’ında yani araç çubuğunda bulunmazlar. Onları herhangi bir projeye eklemek için Solution Explorer’dan o ascx uzantılı dosyayı tutarak sayfada istenilen yere bırakılması yeterlidir. Web User Controller, .NET’in diğer kontrollerine benzemez. Aslında Masterpage çıkmadan önce kullanılan bir teknik olarak nitelendirebiliriz. User Controller masterpageden biraz farklı çalışırlar MasterPage de sayfa teması hazırlarken User Controller tek amacı yazıp sayfaya yerleştirmek için kullanılır. Yine bir sol menu düşünelim. Sol menüyü user control olarak yaptığımızda her sayfaya (aspx) tek tek taşımamız gerekmektedir. 3) Web User Control dosyamızın uzatısı ascx olarak tanımlanır. Normal web sayfaların farklı yoktur. Tasarım ve kodlamalar aynen Web User Controldede yapılabilir. Tek farklılık ascx dosyalar tek olarak çalıştırılamaması. Projemize eklemiş olduğumuz WebUserControl.ascx dosyamızı açalım ve içerisine bilgiler girelim. 22 1)Yeni bir Web Sayfası açalım. Add New Item seçeneğinden ek olarak 2 sayfa daha ekleyelim. Böylece projemizde Default.aspx, Default2.aspx, Default3.aspx adından toplam 3 tane sayfamız olacaktır. 2) Bunlara ek olarak Add New Item’dan Web User Control ekleyelim.
  • 52. 52 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 4) Oluşturduğumuz Web User Control artık tüm sayfalarımızda çalışabilir. Bunu için Default.aspx, Default2.aspx, Default3.aspx dosyalarına webusercontrol.ascx dosyasını sürükleyiniz. 5) Artık tüm sayfalarımızda menümüzü kullanabiliriz. Web User Controlde yaptığımız tüm değişikliklerde diğer sayfalarda etkilenecektir. CLASS, VERİTABANI ve ÜYELİK SİSTEMİ Class: Bir projede birden fazla yerde kullanılacak kodu her seferinde yazmaktansa tek bir yerde yazıp diğer yerlerde de kullanma işine denir. Veritabanı: Bilgisayar ortamında saklanan düzenli verilerdir. Ado.Net Web üzerinden veritabanına bağlanmak ve veri işlemleri gerçekleştirmek için ADO.NET teknolojinden faydalanarak işlemlerimizi gerçekleştireceğiz. ADO.NET her ne kadar ADO teknolojine benzese de aslında çok fazla ilgisi yoktur. ADO.NET (Activex Data Objet) tamamıyla yeniden geliştirilen yapısı ile verilere ulaşır. ADO.NET verilere erişirken ADO gibi sadece OLEDB Provider değil, onun dışında SQL Provider yapısını da kullanır. ADO.NET veri geçişlerinde XML yapısına tam uyumlu olduğundan sağlam ve performansı yüksek her ortama uyumludur. .NET Platformunu yüklediğimizde sahip olduğumuz Providerlar Odbc, Oledb, SqlClient gelmektedir. Fakat Oracle veritabanınıza bağlanmak istiyorsanız www.oracle.com adresinden OPD.NET’i indirmeniz gerekmektedir.
  • 53. 53 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 3) WebSite11’e sağ tıklayıp açılan pencereden New Folder menüsüne tıklayalım. Klasör adına Kontrol adı verelim. 4)Kontrol klasörüne sağ tıklayarak Add New Item diyelim. 5)Web User Control seçerek adına Uye yazalım ve Add butonuna tıklayalım. 23 1)Yeni bir Web Sayfası açalım. 2)Access’te bir veri tabanı oluşturulup “App_Data” klasörünün içine “vt.mdb” şeklinde atalım. Sebebi ise class içinde veri tabanı adresini ana dizinde App_Data klasöründe vt.mdb seklinde tanımlama yapacağız.
  • 54. 54 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 5) Aşağıda görüldüğü gibi Uye.ascx Kontrol klasörü altına eklenmiş oldu. Şimdi Uye.ascx’e geçilerek aşağıdaki işlemler yapılır. Bir adet “MultiView” ekliyoruz. İçine tıklayıp ” view” ekliyoruz hiçbir yere tıklamadan bir tane daha ekliyoruz. Multiview’in ActiveViewIndex özelliğini “0” yapıyoruz ve View1’de işlemleri yapmaya başlıyoruz. İlk olarak bir Label ekliyoruz ve Text özelliğinin içini boşaltıyoruz. Ardında bir alt satıra geçip “Kullanıcı Adı:” yazıyoruz ve yanına bir adet Textbox ekliyoruz. Bir satır daha indikten sonra “Şifre:” yazıyoruz ve yanına bir Textbox daha ekliyoruz. Bu TextBoxs’un TextMode özelliğini Password yapıyoruz. Sonra alt satıra ise bir buton koyup Text özelliğine Giriş yazıyoruz. Bir alt satıra ise bir Link Button koyuyoruz ve Text özelliğine Yeni Kayıt yazıyoruz.
  • 55. 55 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com View2’de ise ilk başta “Hoş Geldiniz” yazıp yanına “Label” koyuyoruz. Bir alt satıra geçerek bir LinkButton ekleyerek Text özelliğine “Cıkış” yazıyoruz. 6)Şimdi de bir veri tabanı oluşturalım. Adı “vt.mdb” oldun. İçindeki tablo adı ise “Uye” olsun. Tablo içindeki alan adları ise aşağıdaki resimdeki görülen değerler olsun. Veritabanını en son “App_Data” içine atalım. Sıra geldi kodlamaya. using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Data.OleDb; public partial class Kontrol_Uye : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { if (Session["ID"] != null) { MultiView1.ActiveViewIndex = 1;
  • 56. 56 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com OleDbConnection bag = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;data source=" + Server.MapPath("~/App_Data/vt.mdb")); bag.Open(); OleDbDataAdapter da = new OleDbDataAdapter("select * from Uye where ID= " + Session["ID"].ToString(), bag); DataTable dt = new DataTable(); da.Fill(dt); bag.Close(); Label2.Text = dt.Rows[0]["Ad"].ToString() + " " + dt.Rows[0]["Soyad"].ToString(); } else { MultiView1.ActiveViewIndex = 0; } } protected void Button1_Click(object sender, EventArgs e) { OleDbConnection bag = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;data source=" + Server.MapPath("~/App_Data/vt.mdb")); bag.Open(); OleDbDataAdapter da = new OleDbDataAdapter("select * from Uye where KullaniciAdi='" + TextBox1.Text + "'and Sifre='" + TextBox2.Text + "'", bag); DataTable dt = new DataTable(); da.Fill(dt); bag.Close(); if (dt.Rows.Count == 0) { TextBox1.Text = ""; TextBox2.Text = ""; Label1.Text = "Hatalı Giriş"; } else { Session.Add("ID", dt.Rows[0]["ID"]); Session.Add("Yetki", dt.Rows[0]["Yetki"]); Response.Redirect("Default.aspx"); } } protected void LinkButton2_Click(object sender, EventArgs e) { Session.Abandon(); Response.Redirect("?"); } } Kod yazma işlemi bitince karşınıza aşağıdaki pencereler gelecekir.
  • 57. 57 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 7) WebSite11’e sağ tıklayıp açılan pencereden “Add ASP.Net folder > App_Code” Seçiyoruz ve App_Code klasörü ekleniyor. Buraya Class’ımızı ekleyeceğiz. 8)Şimdide App_Code klasörüne sağ tıklayarak Add New Item seçelim. 9)Aşağıdaki pencere açılacaktır. Buradan Class seçip adını “veritabani” koyup Add diyelim.
  • 58. 58 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com 10)Uye.cs Class’ına girerek aşağıdaki kodu yazalım. using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Data.OleDb; /// <summary> /// Summary description for islem /// </summary> public class veritabani { public static DataTable selectcalistir(string sql) { OleDbConnection con = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source =" + HttpContext.Current.Server.MapPath("~/App_data/vt.mdb")); con.Open(); OleDbDataAdapter da = new OleDbDataAdapter(sql, con); DataTable dt = new DataTable(); da.Fill(dt); con.Close(); return dt; } public static string komutcalistir(string sql) { string mesaj = ""; OleDbConnection con = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + HttpContext.Current.Server.MapPath("~/App_data/vt.mdb")); con.Open(); OleDbCommand cmd = new OleDbCommand(sql, con); try {
  • 59. 59 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com cmd.ExecuteNonQuery(); } catch (Exception ex) { mesaj = ex.Message; } con.Close(); return mesaj; } } Bu şekilde class’ımızı oluşturmuş olduk. 11) Şimdi ise kaydının yapıldığı sayfayı tasarlayalım. Bunun için 5 adet TextBox, 1 Button, 1 CheckBox, 1 RequiredFieldValidator, 1 Compare Validator ekleyelim. Valitator ayarlarını yapalım. Ve aşağıdaki kodu bu sayfa için yazalım. using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; public partial class UyeKayit : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { if (CheckBox1.Checked) { string sec = string.Format("insert into Uye (KullaniciAdi,Sifre,Ad,Soyad) values ('{0}','{1}','{2}','{3}')", TextBox1.Text, TextBox2.Text, TextBox4.Text, TextBox5.Text); string msg = veritabani.komutcalistir(sec); if (msg != "") {
  • 60. 60 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Response.Redirect(msg); } else { Label1.Text = "Üye Kaydı Başarıyla Yapılmıştır."; } } } } Gereken bilgileri yazdıktan sonra Kaydet dediğimizde “Üye Kaydı Başarıyla Yapılmıştır” uyarısı gözükecektir. Veritabanına bakarsak üye kaydının yapıldığını göreceğiz.
  • 61. 61 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com İletişim Sayfası Web sayfalarının olmazsa olmazlarından biri de iletişim sayfasıdır. İletişim sayfasının olması yanında, sağlam çalışması da şarttır. Şimdi de İletişim sayfasının uygulamasını yapalım. 3)Gönder ve Temizle butonlarının içine aşağıdaki kodları yazmamız gerekmektedir. using System; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Net.Mail; public partial class iletisim : System.Web.UI.Page { protected void btnGonder_Click(object sender, EventArgs e) 24 1)Yeni bir Web Sayfası açalım. 2)Toolboxdan sayfaya 5 adet TextBox, 2 adet Buton, 5 adet RequiredFieldValidator , 1 adet RegularExpressionValidator ve 1 adet Label ekleyerek aşağıdaki gibi tasarlayın.
  • 62. 62 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com { try { string mesaj = "<b>Gönderen:<b><br>" + "-----------------<br><br>" + "<b>Adınız : </b> " + txtAdiniz.Text + "<br>" + "<b>Soyadınız : </b> " + txtSoyAdiniz.Text + "<br>" + "<b>E-Mail Adresiniz:</b> " + txtEposta.Text + "<br>" + "<b>Konu:</b> " + txtKonu.Text +"<br>"+ "<b>İçerik:</b><br> " + txtMesaj.Text; MailMessage mail = new MailMessage(); //Mail gönderecen bilgisi. mail.From = new MailAddress(txtEposta.Text); mail.IsBodyHtml = true; mail.Subject = txtKonu.Text; //Maili ulaştıracağınız mail adresi mail.To.Add(new MailAddress("msn@gokhanturan.com")); mail.Body = mesaj; SmtpClient mailSender = new SmtpClient(); System.Net.NetworkCredential izin = new System.Net.NetworkCredential(); //Maili göndereceğiniz mail adresi izin.UserName = "msn@gokhanturan.com"; //Sifreniz izin.Password = "**********"; //Maili göndereceğiniz host bilgileri mailSender.Host = "mail.gokhanturan.com"; mailSender.Credentials = izin; mailSender.Send(mail); lblGeriDonut.Text = "E-postanız Başarı İle İletilmiştir."; txtAdiniz.Text = ""; txtSoyAdiniz.Text = ""; txtKonu.Text = ""; txtEposta.Text = ""; txtMesaj.Text = ""; } catch (Exception ex) { lblGeriDonut.Text = "E-posta yollanamadı! Lütfen tekrar deneyiniz..!"; } } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { } protected void Button8_Click(object sender, EventArgs e) { txtAdiniz.Text = ""; txtSoyAdiniz.Text = ""; txtKonu.Text = ""; txtEposta.Text = ""; txtMesaj.Text = ""; lblGeriDonut.Text = ""; } }
  • 63. 63 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Fotoğraf Galerisi ve Upload Yapacağınız web sayfalarında fotoğraf galerisi olması, sitenin daha kullanışlı olmasını sağlar. Şimdi de fotoğraf galerisi ekleme ve bu galeriye resim yükleme ile ilgili uygulama yapacağız. Reperater’ın HTML kod kısmına aşağıdaki kod yazılır. <ItemTemplate> <div style="background-color:#ccc; padding:2px 5px;"><%# Eval("slayt_adi") %></div> <div style="background-color:#eee; margin:0 0 10px 0; padding:5px;"> <%# resimleri_al(Eval("resimler").ToString(), Eval("id").ToString()) %></div> </ItemTemplate> Yani HTML kod kısmı tamamıyla aşağıdaki gibi alacaktır. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Galeri</title> <link href="css/prettyPhoto.css" rel="stylesheet" type="text/css" /> <script src="jquery-1.2.6.pack.js" type="text/javascript"></script> <script src="jquery.prettyPhoto.js" type="text/javascript"></script> <script> $(document).ready(function(){ $("a[rel^='slayt']").prettyPhoto({ animationSpeed: 'normal', padding: 40, opacity: 0.5, showTitle: false, allowresize: true, counter_separator_label: '-' }); }); </script> </head> <body> <form id="form1" runat="server"> <div style="width:600px;"> <asp:Repeater ID="Repeater1" runat="server"> <ItemTemplate> <div style="background-color:#ccc; padding:2px 5px;"><%# Eval("slayt_adi") %></div> <div style="background-color:#eee; margin:0 0 10px 0; padding:5px;"> <%# resimleri_al(Eval("resimler").ToString(), Eval("id").ToString()) %> </div> </ItemTemplate> </asp:Repeater> </div> 25 1)Yeni bir Web Sayfası açalım. 2)Toolbox Data kısmından Repeater çalışma sayfasına sürüklenir.
  • 64. 64 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com <script type="text/javascript">var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document.write(unescape("%3Cscript src='" + gaJsHost + "google- analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));</script><script type="text/javascript">var pageTracker = _gat._getTracker("UA-5427731- 1");pageTracker._trackPageview();</script> </form> </body> </html> Veri tabanı ise aşağıdaki gibi olacaktır. Sayfanın loadındaki kodlar ise aşağıdaki gibidir. using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.OleDb; public partial class galeri : System.Web.UI.Page { OleDbConnection bg; protected void Page_Load(object sender, EventArgs e) { bg = new OleDbConnection("provider=microsoft.jet.oledb.4.0; data source=" + Server.MapPath("~/deneme.mdb")); OleDbDataAdapter adaptor = new OleDbDataAdapter("select * from resimler order by id desc", bg); DataTable table = new DataTable(); adaptor.Fill(table); Repeater1.DataSource = table; Repeater1.DataBind(); } public string resimleri_al(string resimler, string resim_id) { string[] dizi = resimler.Split('ß'); string sonuc = ""; for (int i = 0; i < dizi.Length-1; i++) { sonuc += "<a rel=slayt["+resim_id+"] href='img/" + dizi[i] + "'><img src='img/kucuk/"+dizi[i]+"' border=0/></a> ";
  • 65. 65 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com } return sonuc; } } Veri tabanına kayıtlı resim isimleri aşağıdaki gibidir. *Görüldüğü gibi her bir resim arasında “ß” sembolü vardır. Galerinin son hali aşağıdaki gibidir. Unutulmaması gereken “jquery-1.2.6.pack.js” ve “jquery.prettyPhoto.js” dosyalarının ve bunun yanında jquery’ye ait resimlerin aynı klasörde olması gerekmektedir.
  • 66. 66 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com Galeriye Resim Yükleme (Upload) Resim Upload edeceğimiz sayfa aşağıdaki gibidir. Bunu tasarladıktan sonra kod kısmına geçiyoruz. “Upload Et” butonunun içine kodumuzu yazıyoruz. Aşağıda tüm kodlar yer almaktadır. using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.OleDb; public partial class upload : System.Web.UI.Page { FileUpload[] fu = new FileUpload[20]; OleDbConnection bg; protected void Page_Load(object sender, EventArgs e) { bg = new OleDbConnection("provider=microsoft.jet.oledb.4.0; data source=" + Server.MapPath("~/deneme.mdb")); kontrol_ekle(); Button1.Enabled=false; } public static System.Drawing.Image Olcekle(string resimYolu, int wid, int hei) { System.Drawing.Image imgOrg = System.Drawing.Image.FromFile(resimYolu);
  • 67. 67 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |gokhanturan@gokhanturan.com System.Drawing.Image imgOlceklenmis = imgOrg.GetThumbnailImage(wid, hei, null, IntPtr.Zero); imgOrg.Dispose(); return imgOlceklenmis; } public void uploads() { for (int i = 0; i < int.Parse(adet_sec.SelectedValue); i++) { FileUpload f = fu[i]; if (f.HasFile) { f.SaveAs(Server.MapPath("~/img/") + fu[i].FileName); System.Drawing.Image Kucuk = Olcekle(Server.MapPath("~/img/" + f.FileName), 150, 80); Kucuk.Save(Server.MapPath("~/img/kucuk/" + f.FileName)); } } } public void kontrol_ekle() { for (int i = 0; i < int.Parse(adet_sec.SelectedValue); i++) { fu[i] = new FileUpload(); fu[i].ID = "fu_" + i.ToString(); resimler.Controls.Add(fu[i]); } } public string resim_adlari() { string sonuc = ""; for (int i = 0; i < int.Parse(adet_sec.SelectedValue); i++) { FileUpload f = fu[i]; if (f.HasFile) { sonuc += f.FileName.Replace("ß", "") + "ß"; } } return sonuc; } protected void Button1_Click(object sender, EventArgs e) { uploads(); kayit(resim_adlari()); } public void kayit(string resimler) { OleDbCommand komut = new OleDbCommand("insert into resimler (slayt_adi,resimler) values('"+TextBox1.Text+"','"+resimler+"')", bg); bg.Open(); komut.ExecuteNonQuery(); bg.Close(); } } Galeri oluşturmak için “jquery” dosyalarını indirmek için tıklayınız.