internet programcılığı-i

67
İ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 [email protected]

Upload: emre61

Post on 12-Jul-2015

439 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Internet programcılığı-i

İ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

[email protected]

Page 2: Internet programcılığı-i

2 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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:

Page 3: Internet programcılığı-i

3 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 4: Internet programcılığı-i

4 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 5: Internet programcılığı-i

5 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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

Page 6: Internet programcılığı-i

6 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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

Page 7: Internet programcılığı-i

7 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 8: Internet programcılığı-i

8 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 9: Internet programcılığı-i

9 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 10: Internet programcılığı-i

10 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

Resim 1:Visual Studio 2008

Resim 2:Yeni Web Sayfası Oluşturma Penceresi

Page 11: Internet programcılığı-i

11 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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

Page 12: Internet programcılığı-i

12 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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

Page 13: Internet programcılığı-i

13 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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

Page 14: Internet programcılığı-i

14 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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;

Page 15: Internet programcılığı-i

15 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 16: Internet programcılığı-i

16 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 17: Internet programcılığı-i

17 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 18: Internet programcılığı-i

18 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 19: Internet programcılığı-i

19 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 20: Internet programcılığı-i

20 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 21: Internet programcılığı-i

21 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

}

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.

Page 22: Internet programcılığı-i

22 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

{

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.

Page 23: Internet programcılığı-i

23 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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

Page 24: Internet programcılığı-i

24 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 25: Internet programcılığı-i

25 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 26: Internet programcılığı-i

26 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 27: Internet programcılığı-i

27 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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;

}

Page 28: Internet programcılığı-i

28 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 29: Internet programcılığı-i

29 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 30: Internet programcılığı-i

30 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 31: Internet programcılığı-i

31 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 32: Internet programcılığı-i

32 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 33: Internet programcılığı-i

33 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 34: Internet programcılığı-i

34 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 35: Internet programcılığı-i

35 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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:

Page 36: Internet programcılığı-i

36 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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

Page 37: Internet programcılığı-i

37 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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;

Page 38: Internet programcılığı-i

38 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 39: Internet programcılığı-i

39 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

Ç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.

Page 40: Internet programcılığı-i

40 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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ı:

Page 41: Internet programcılığı-i

41 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 42: Internet programcılığı-i

42 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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();

Page 43: Internet programcılığı-i

43 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 44: Internet programcılığı-i

44 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 45: Internet programcılığı-i

45 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 46: Internet programcılığı-i

46 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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ı.

Page 47: Internet programcılığı-i

47 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 48: Internet programcılığı-i

48 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 49: Internet programcılığı-i

49 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 50: Internet programcılığı-i

50 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 51: Internet programcılığı-i

51 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

Ö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.

Page 52: Internet programcılığı-i

52 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 53: Internet programcılığı-i

53 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 54: Internet programcılığı-i

54 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 55: Internet programcılığı-i

55 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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;

Page 56: Internet programcılığı-i

56 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 57: Internet programcılığı-i

57 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 58: Internet programcılığı-i

58 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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

{

Page 59: Internet programcılığı-i

59 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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 != "")

{

Page 60: Internet programcılığı-i

60 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 61: Internet programcılığı-i

61 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

İ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.

Page 62: Internet programcılığı-i

62 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

{

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("[email protected]"));

mail.Body = mesaj;

SmtpClient mailSender = new SmtpClient();

System.Net.NetworkCredential izin = new System.Net.NetworkCredential();

//Maili göndereceğiniz mail adresi

izin.UserName = "[email protected]";

//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 = "";

}

}

Page 63: Internet programcılığı-i

63 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.

Page 64: Internet programcılığı-i

64 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

<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> ";

Page 65: Internet programcılığı-i

65 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

}

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.

Page 66: Internet programcılığı-i

66 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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);

Page 67: Internet programcılığı-i

67 Öğr.Gör. Gökhan TURAN | www.gokhanturan.com |[email protected]

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.