Вы находитесь на странице: 1из 283

YAZILIM UZMANLIĞI

Uygulamalı Yazılım Projeleri

Okan Tekeli

Editör C. Banu Üçüncüoğlu

Uygulamalı Yazılım Projeleri

Okan Tekeli

Editör: C. Banu Üçüncüoğlu

Kapak Tasarımı: Melih Sancar

Grafik Tasarım: Tuna Erkan

Grafik Uygulama: Soner Işık

Genel Yayın Yönetmeni: Mehmet Çömlekçi

1. Basım: Şubat 2008

Rev: 00

Bilge Adam Yayınları: 22

Eğitim Yayınları Dizisi:22

ISBN: 978-605-5987-20-6

Copyright © 2007, Bilge Adam Bilgisayar ve Eğitim Hizmetleri San. ve Tic. A.Ş.

Eserin tüm yayın hakları Bilge Adam Bilgisayar ve Eğitim Hizmetleri San. ve Tic. A.Ş.’ye aittir. Yayınevinden yazılı izin alınmadan kısmen ya da tamamen alıntı yapılamaz, hiçbir şekilde kopya edilemez, çoğaltılamaz ve tekrar yayımlanamaz. Bilge Adam’ın öğrencilerine ücretsiz armağanıdır, para ile satılamaz.

Bilge Adam Bilgisayar ve Eğitim Hizmetleri San. ve Tic. A.Ş.

19 Mayıs Mahallesi, 19 Mayıs Caddesi, UBM Plaza, No: 59-61, Kat: 4-7; Şişli, İstanbul

Telefon: (212) 272 76 00 – (212) 217 05 55 Faks: (212) 272 76 01

www.bilgeadam.com - info@bilgeadam.com

İçindekiler

Proje 1: herkesburada.com �������������������������������������������������������������������������������������������������������3

Görüşmeler

3

Ahmet Becerikli (Proje Sahibi) ���������������������������������������������������������������������������������������3

3 Uygulama Analizi

Uygulama Analizi �����������������������������������������������������������������������������������������������������������3

4

Uygulama Tasarımı

3 4 Uygulama Tasarımı Veritabanı Tasarımı

Veritabanı Tasarımı��������������������������������������������������������������������������������������������������������4

Arayüz Tasarımı�������������������������������������������������������������������������������������������������������������5

Proje 2: Otobüs Otomasyonu ������������������������������������������������������������������������������������������������107

107

107

Genel Bakış

Görüşmeler

Özgür Kolukısa (Genel Müdür) ����������������������������������������������������������������������������������107

Selçuk Huysuz (Müşteri Hizmetleri Müdürü) ��������������������������������������������������������������107

Baki Çokbilmiş (Personel Sorumlusu)������������������������������������������������������������������������107

Vildan Parasever (Muhasebe Sorumlusu) �����������������������������������������������������������������108

108

Uygulama Tasarımı

Veritabanı Tasarımı����������������������������������������������������������������������������������������������������108

Arayüz Tasarımı���������������������������������������������������������������������������������������������������������122

Uygulama �������������������������������������������������������������������������������������������������������������������166

Proje 3: DVDDukkani.com������������������������������������������������������������������������������������������������������169

169

Görüşmeler

Hüsamettin Beceriksiz (Proje Sahibi)�������������������������������������������������������������������������169

169

Uygulama Tasarımı

Veritabanı Tasarımı����������������������������������������������������������������������������������������������������169

Arayüz Tasarımı���������������������������������������������������������������������������������������������������������172

Ek - A: Teknik Terimler Sözlüğü���������������������������������������������������������������������������������������������237

237

Önsöz

Yazılan bu proje kitabı, eğitiminiz boyunca göreceğiniz konuların toplu bir şekilde uygulamalarını yapabileceğiniz, size temel konularda pratik kazandırmayı hedefleyen, yol gösteren projelerden oluşuyor. Amacımız sizi oyuna hazır birer oyuncu olarak çıkarmak. Bu kitaptaki projeler içerisinde bir projeye başlanacağı zaman “Nereden başlamalı, nasıl ilerlemeli?” sorularına cevap bulacak- sınız.

Elinizdeki bu projeler derste işlenmeyecek, konu bitiminde sizlere taşın altına elinizi koymanız için yol gösterecek. Proje kitabı temelde eğitim odaklı ilerlemekte, verilen senaryolara destek amaçlı yazıldı. İlgili konu bittiği zaman projeyi adım adım takip ederek tamamlamanız, kitapta yazılmayıp sizden yapmanız istenen bölümleri yapmanız, verilen uyarı ve ipuçlarını kullanmanız sizlere proje yapmakta pratik kazandıracak.Yapılan bu projeler ile birlikte, sizlere verilen örnek senaryoları tamamlamanız, bir proje içerisindeki sorunları çözmenizde ve resmi daha en başından görebil- menizde büyük katkı sağlayacaktır. Kitaptaki projeleri tamamladıktan sonra örnek senaryoları bitirmeniz, eğitiminiz sonunda sizlere iş hayatına hazır birer yazılım uzmanı olma yolunda büyük katkı sağlayacaktır.

Umarım sizler için yararlı bir çalışma olur. İyi Çalışmalar.

Okan Tekeli

1

1 Proje 1: herkesburada.com

Proje 1:

herkesburada.com

1 Proje 1:

herkesburada.com

Görüşmeler

Uygulama Tasarımı

Proje 1: herkesburada.com

Görüşmeler

Ahmet Becerikli (Proje Sahibi)

Yapmak istediğimiz web uygulaması sayesinde üyelerimizin site üzerinden arkadaşlıklar kurma- larını, birbirlerinin albümlerini görebilmelelerini ve mesaj atmalarını istiyoruz. Şu andaki mevcut internet sitelerindeki üye kayıt sayfaları kullanıcılardan detaylı bilgiler istiyor fakat bizim sitemize üye olurken sadece kullanıcının e-posta, şifre bilgisi ve rumuz girip üye olsun daha sonradan kendi profil bilgilerini düzenlesin. Sitemizde her sayfaya ancak üye olan kullanıcı erişebilir, üye olmayan kullanıcının herhangi bir işlem yapmasını istemiyoruz.

Üye profili olarak ise Tablo 1.1‘de verilen bilgileri girmesini istiyoruz. Tablo 1.1: Müşteri İhtiyaçları Tablosu
Üye profili olarak ise Tablo 1.1‘de verilen bilgileri girmesini istiyoruz.
Tablo 1.1: Müşteri İhtiyaçları Tablosu
Ad
Hakkında
Soyad
Rumuz
Doğum Tarihi
Dinlediği Müzik
Cinsiyet
Meslek
Eğitim Durumu
Okuduğu Kitaplar
Bulunduğu Şehir
Tuttuğu Takım
Bulunduğu Ülke
Yaptığı Spor
Hobileri
Sigara İçer mi
Fobileri
Alkol Kullanır mı
İstediğim zaman eğitim durumu, ilgi alanı, şehir, ülke, meslek ve takım tanımlamalarını yapabil-
meliyim. Profil bilgilerini kimlerin görebileceğini kullanıcı belirlesin. İsterse herkes görür, isterse
sadece arkadaşları görebilir.
Üyeler kendi profil resimleri haricinde farklı
albümler oluşturabilsin ama bu albümleri herkes
göremesin, profil görüntülemedeki gibi sadece arkadaşlar veya herkes görebilsin deme imkanı
olmalı.
Üyeler birbirlerine özel mesaj atabilsinler. Mesaj atarken eğer mesaj atacağı üye kullanıcının ar-
kadaşı ise kullanıcı adının veya kime kısmının yazılacağı yer otomatik tamamlansın, eğer arkadaş
değil ise tamamlanmasın. Burada teklif dediğimiz bir sistem olmalı. Arkadaşlık teklifi sonrasında
iki kullanıcı arkadaş olabilecek ve albüm, profil gibi bilgilere erişmeye başlayacak. Çoğu arka-
daşlık sitesinde bulunan titreşim gönderme ya da çiçek ısmarlama gibi uygulamalar istemiyoruz
sadece mesaj göndersin yeter. Kullanıcılar arkadaş listelerindeki online arkadaşları ile chat yapa-
bilsin istiyoruz. Bazı internet sitelerinde kullanıcılar kendi ana sayfalarını özelleştirebiliyor. Bizim
sitemizde de kullanıcılar sayfalarında istedikleri bölümleri göstersin, istemediklerini göstermesin.
Farklı tema seçenekleri olsun. Bir de bazı siteler kullanıcı işlem yaparken ekranda kalıyor hiç gelip
gitmiyor, tıpkı Windows uygulaması gibi hemen işlem yapıyor, bizim sitemiz de o şekilde olsun.

Uygulamada 2 rol istiyoruz. Bunlardan biri admin diğeri ise standart. Admin grubu uygulama içe- risinde kullanıcı rol değiştirme, şifre resetleme ve yönetmesini istediğimiz bilgileri yönetme gibi işlemleri yapacak. Standart rolü ise bildiğimiz üye olacak.

Uygulama Analizi

Projeye başlamadan önce bir analiz yapılacak olursa;

1. Uygulama rol bazlı olacak. Uygulama içerisinde kullanıcılar istediği yerleri özelleştirebileceği için web part kullanılacak ve Windows uygulaması gibi hızlı tepki verebilmek için ajax tekno- lojisi kullanılacak.

için web part kullanılacak ve Windows uygulaması gibi hızlı tepki verebilmek için ajax tekno- lojisi kullanılacak.

 Proje 1 2. Kullanıcılar arası mesajlaşma sistemi olacak. 3. Kullanıcılar sadece onayladıkları

Proje 1

2.

Kullanıcılar arası mesajlaşma sistemi olacak.

3.

Kullanıcılar sadece onayladıkları kullanıcılar ile mesajlaşabilecek

4.

Chat uygulaması olacak.

5.

Kullanıcı bazlı fotoğraf galerisi olacak.

6.

Tartışma grupları oluşturulabilecek, gerektiğinde mesajlar mail atılacak.

Şekil 1.1: Membership veritabanı oluşturmak. Şekil 1.3: Takimlar tablosu.
Şekil 1.1: Membership veritabanı oluşturmak.
Şekil 1.3: Takimlar tablosu.

Uygulama Tasarımı

Veritabanı Tasarımı

Takimlar tablosu. Uygulama Tasarımı Veritabanı Tasarımı  Asp.Net membership alt yapısı kullanılacağı için

Asp.Net membership alt yapısı kullanılacağı için veritabanı sunucunuzu açın.

HerkesBuradaDb isminde veritabanı oluşturun.

Başlat > Programlar > Visual Studio 2008 > Visual Studio Tools < Visual Studio 2008 Com- mand Prompt aracını çalıştırın.

Studio 2008 Com- mand Prompt aracını çalıştırın. Uygulama kısayolu programlar menüsünde buluna - 

Uygulama kısayolu programlar menüsünde buluna- mıyorsa Başlat > Çalıştır > “C:\Program Files\Mic- rosoft Visual Studio 9.0\VC\” komutunu yürütün.

Aspnet_regsql komutunu çalıştırın. Çıkan sihir- bazdan HerkesBuradaDb veritabanı seçin ve ya- pılandırın.

Veritabanının üyelik sistemini kullanacağı tablolar oluşturulduktan sonra HerkesBuradaDb ve- ritabanını açın. Şekil 1.2 ile Şekil 1.9 arasındaki tablolaları aspnet_regsql aracı ile oluşturulan membership tablolarına ek olarak oluşturun.

oluşturulan membership tablolarına ek olarak oluşturun. Şekil 1.2: Sehirler tablosu. Şekil 1.4: Albumler
oluşturulan membership tablolarına ek olarak oluşturun. Şekil 1.2: Sehirler tablosu. Şekil 1.4: Albumler

Şekil 1.2: Sehirler tablosu.

ek olarak oluşturun. Şekil 1.2: Sehirler tablosu. Şekil 1.4: Albumler tablosu. Şekil 1.5: ArkadasListesi

Şekil 1.4: Albumler tablosu.

ek olarak oluşturun. Şekil 1.2: Sehirler tablosu. Şekil 1.4: Albumler tablosu. Şekil 1.5: ArkadasListesi tablosu.

Şekil 1.5: ArkadasListesi tablosu.

ek olarak oluşturun. Şekil 1.2: Sehirler tablosu. Şekil 1.4: Albumler tablosu. Şekil 1.5: ArkadasListesi tablosu.
Şekil 1.6: EgitimDurumlari tablosu. herkesburada.com  Şekil 1.7: Fotograflar. Tüm tablolardaki primary key

Şekil 1.6: EgitimDurumlari tablosu.

herkesburada.com

Şekil 1.6: EgitimDurumlari tablosu. herkesburada.com  Şekil 1.7: Fotograflar. Tüm tablolardaki primary key

Şekil 1.6: EgitimDurumlari tablosu. herkesburada.com  Şekil 1.7: Fotograflar. Tüm tablolardaki primary key

Şekil 1.7: Fotograflar.

Tüm tablolardaki primary key sütunlarınının identity specification‘ı Yes yapılmalı ve identitty increment ve
Tüm tablolardaki primary key sütunlarınının
identity specification‘ı Yes yapılmalı ve identitty
increment ve seed 1 olarak belirtilmelidir.
Şekil 1 8: Mesajlar tablosu.
Şekil 1.9: Meslekler tablosu.
Oluşturulan tablolardaki ilişkileri yapılandırın.
Kaynak Tablo
Kaynak Sütun
Hedef Tablo
Hedef Sütün
Albumler
KullaniciId
aspnet_Users
UserId
ArkadasListesi
Kim
aspnet_Users
UserId
ArkadasListesi
Kimin
aspnet_Users
UserId
Fotograflar
AlbumId
Albumler
AlbumId
Arayüz Tasarımı
Visual Studio programını açın. New > Web Site > şablonunu seçin. Proje adını HerkesBuradaWe-
bUI şeklinde verin. Dil olarak C# seçin. Version olarak ise .Net Framework 3.5 seçin.

Şekil 1.10 : Yeni web sitesi oluşturma ekranı.

Uygulama oluşturulduktan sonra Solution Explorer penceresinden web.config dosyasını açın. Asp.Net membership altyapısından yararlanabilmek için configuration düğümü içerisinde (sys- tem.web düğümü hemen üzerine) connectionStrings düğümü ekleyin. Mevcut ConnectionS- tring düğümü silinmeli ve daha sonra aşağıdaki düğüm eklenmeli (Liste 1.1).

ekleyin. Mevcut ConnectionS- tring düğümü silinmeli ve daha sonra aşağıdaki düğüm eklenmeli (Liste 1.1).

 Proje 1 <connectionStrings> <clear/> <add name=”LocalSqlServer”

Proje 1

<connectionStrings>

<clear/>

<add name=”LocalSqlServer” connectionString=”server=.;data base=HerkesBuradaDb;user id=dbUser;password=123”/>

</connectionStrings>

Liste 1.1: Web.config connectionStrings tanımlaması.

Şekil 1.11: Asp.Net Web Administration Application.
Şekil 1.11: Asp.Net Web Administration Application.

Uygulamayı yapılandırmak için Asp.Net Configuration aracını açın. Bu aracı açmak için Web Site > Asp.Net Configuration menüsünü takip edebilirsiniz.

> Asp.Net Configuration menüsünü takip edebilirsiniz. Açılan Asp.Net Web Application Administration sitesinden

Açılan Asp.Net Web Application Administration sitesinden security sekmesine gelin. Şekil 1.11 haricinde bir çıktı görünüyorsa, hatayı okuyarak sorunu giderin. Oluşabilecek muhtemel hatalar;

Web.config dosyası içerisinde connection string’in yanlış yazılması ve yazım hatası (“;” kul- lanmayı unutmak).

Sql Server veritabanına bağlantı kurulamaması.

Bağlanılmak istenen veritabanı sunucusunun çalışmıyor olması.

Sorunsuz bağlantı sağdıktan sonra sırası ile;

1.

2.

3.

4.

5.

Security sekmesi altındaki Users bölümü içerisinden Select authentication type link’ine tıkla- yın.

From Internet seçeneği seçin. Done butonuna tıklayın.

Security Sekmesi içerisinden Roles bölümünden Enable Roles link’ine tıklayın.

Security Sekmesi içerisinden Roles bölümünden Create or Manage roles link’ine tıklayın.

Admin ve Standart olarak 2 adet rol ekleyin.

Roles bölümünden Create or Manage roles link’ine tıklayın. Admin ve Standart olarak 2 adet rol ekleyin.

herkesburada.com

6. Internet Explorer penceresini kapatıp uygulamaya dönün.

7. Uygulamaya geri dönüldüğü zaman web.config dosyasında yapılan değişiklikler yüzünden Visual Studio dosya değişiklik uyarısı verecektir. Çıkan uyarıya Yes to All diyerek onaylayın.

8. Solution Explorer penceresinden uygulama üzerinde sağ tıklayın. New Folder menüsünü işa- ret edin. Klasör ismini admin olarak verin.

9. Asp.Net Configuration aracını çalıştırın. Solution Expolorer penceresi üzerindeki en sağda bulunan ikona tıklayarak açabilirsiniz. (Şekil 1.12)

bulunan ikona tıklayarak açabilirsiniz. (Şekil 1.12) <providers> Şekil 1.12: Asp.Net Configuration

<providers>

açabilirsiniz. (Şekil 1.12) <providers> Şekil 1.12: Asp.Net Configuration Tool’u

Şekil 1.12: Asp.Net Configuration Tool’u çalıştırmak.

10. Security sekmesinden Access Rules bölümünden Create access rules link’ine tıklayın.

11. Select a directory for this rule bölümden admin klasörünü seçin. Rule applies to bölümünden Role radio button kon- trolünü seçin. Karşısındaki dropdownlist’ten Admin seçin.

12.

13. Security sekmesinden Access Rules bölümünden Create access rules link’ine tıklayın.

Permission bölünden Allow seçeneğini seçin ve OK butonuna tıklayın.

14. Select a directory for this rule bölümden admin klasörünü seçin Rule applies to bölümünden All users radio button kontrolünü seçin. Permission bölünden Deny seçeneğini seçin.

15. OK butonsuna tıklayın ve web administration tool’u kapatın.

Bu adımları bitirdikten sonra Solution Explorer penceresinden admin klasörü üzerinde sağ tık- layın, Refresh Folder menüsünü seçin. Klasör içerisinde bir web.config olduğu görünecek. Bu dosyaya izin verilen ve yasaklanan gruplar eklendi.

Bu aşamaya kadar uygulama içerisine 2 rol tanımlandı. Tanımlanan bu rollerden admin rol grubu- na, uygulama içerisindeki admin klasörüne erişimine izin verildi, diğer tüm kullanıcılara kapatıldı. Bir web uygulaması içerisinde klasöre erişim izni verirken ilk önce erişimine izin verilecekleri (allow) daha sonra yasaklanacak kullanıcı veya rolleri atayın. İlk önce tüm kullanıcılara yasak- lanırsa, daha sonradan izin verilen kullanıcılar bile erişemeyecek. Yanlış kullanıma örnek olarak;

<authorization>

<deny users=”*” />

<allow roles=”Admin” />

</authorization>

Liste 1.2: Yanlış tanımlanmış authorization düğümü.

Standart olarak membership altyapısı içerisinde kullanıcıların kullanacakları şifre formatı en az 7 karakter olmalı ve bunlardan biri alfa numeric karakter (#,@,? gibi.) olmalı. Uygulama içerisinde bu ayarı değiştirmek için web.config dosyasında membership ayarlarını kendiniz belirleyin. Web. config dosyasına system.web düğümü içerisine Liste 1.3’deki kodu ekleyin.

<membership>

Liste 1.3’deki kodu ekleyin. <membership>  <clear/> <add

<clear/>

<add name=”AspNetSqlMembershipProvider”

type=”System.Web.Security.SqlMembershipProvider, System. Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d

50a3a”

Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d 50a3a” connectionStringName=”LocalSqlServer”

connectionStringName=”LocalSqlServer”

 Proje 1 enablePasswordRetrieval=”false” enablePasswordReset=”true” requiresQuestionAndAnswer=”true”

Proje 1

enablePasswordRetrieval=”false”

enablePasswordReset=”true”

requiresQuestionAndAnswer=”true”

applicationName=”/”

requiresUniqueEmail=”false”

passwordFormat=”Hashed” maxInvalidPasswordAttempts=”5” minRequiredPasswordLength=”5”
passwordFormat=”Hashed”
maxInvalidPasswordAttempts=”5”
minRequiredPasswordLength=”5”
minRequiredNonalphanumericCharacters=”0”
passwordAttemptWindow=”10”
passwordStrengthRegularExpression=”” />
</providers>
</membership>
Liste 1.3: Web.config dosyasında ezilmiş membership bilgileri.
Bu ayardan sonra web uygulaması için şifre uzunluğu en az 5 karakter olacak ve alfa numeric ka-
rakter zorunluluğu olmayacak. Web uygulanmasının admin rolüne sahip kullanıcısını tanımlamak
için Asp.Net Configuration aracını çalıştırarak security sekmesinden Users bölümü içerisindeki
Create User link’ine tıklayın. Admin kullanıcı isminde bir kullanıcı tanımlayın.
Admin kullanıcısı oluş-
turulurken Admin rolü
seçili olmalı.
Kullanıcı bilgilerini tutmak için (Ad, Soyad, Doğum Tarihi) profile kullanın.
Profile tanımlaması için web.config içerisinde profile düğümünü ezin.
Müşterinin istediği kullanıcı bilgilerini tanımlayın.
<profile>
<properties>
<group name=”KisiselBilgiler”>
<add name=”Ad” type=”System.String”/>
<add name=”Soyad” type=”System.String”/>
<add name=”DogumTarihi” type=”System.
DateTime”/>
<add name=”Cinsiyet” type=”System.
Boolean”/>
<add name=”YasadigiSehirId”
type=”System.String”/>
</group>
<add name=”EgitimDurumId” type=”System.
String”/>
<add name=”Hobileri” type=”System.String”/>
<add name=”Fobileri” type=”System.String”/>
<add name=”Hakkinda” type=”System.String”/>

<add name=”MeslekId” type=”System.String”/>

<add name=”OkuduguKitaplar” type=”System.

String”/>

<add name=”TuttuguTakimId” type=”System.

String”/>

type=”System. String”/> <add name=”TuttuguTakimId” type=”System. String”/>

herkesburada.com

herkesburada.com  <add name=”YaptigiSporlar” type=”System. String”/>   <add

<add name=”YaptigiSporlar” type=”System.

String”/>

 

<add name=”SigaraKullanirMi” type=”System.

Boolean”/>

 

<add name=”AlkolKullanirMi” type=”System.

Boolean”/>

<add name=”ProfilYetki” type=”System.Boolean” defaultValue=”true”/> <add name=”ProfilResmi”
<add name=”ProfilYetki” type=”System.Boolean”
defaultValue=”true”/>
<add name=”ProfilResmi” type=”System.String”
defaultValue=”resimyok.jpg”/>
</properties>
</profile>
Profile düğümü
System.Web içe-
risinde yer alır.
Liste 1.4: web.config profile tanımlaması.
Güvenlik için web.config dosyasında kullanılacak authentication tanımlamasını yapın. Standart
olarak web.config içerisinde bu düğüm bulunur. Authentication düğümünü Liste 1.5’teki şekilde
yapılandırın.
<authentication mode=”Forms”>
<forms defaultUrl=”~/kullanici/default.aspx”></
forms>
</authentication>
Liste 1.5: web.config authentication düğümü.
Uygulama içerisinde theme dışındaki stilleri tanımlamak için Style isminde bir klasör oluşturun ve
içine Genel.css isminde stylesheet ekleyin. Eklenen dosyanın içeriğini temizleyin. Eklenen bu stil
belgesi içerisine Liste 1.6’da belirtilen stili tanımlayın.
*
{
font-family: Tahoma, Arial, Helvetica;
}
#SayfaAna
{
width: 70%;
text-align: left;
border: 1px solid #89a5e0;
border-top: none;
}

.AnaIcerik

{

width:100%;

height:100%;

text-align:left;

text-align: left; border: 1px solid #89a5e0; border-top: none; } .AnaIcerik { width:100%; height:100%; text-align:left;

10

10 Proje 1 } #Menu { background-color: #89a5e0; height: 30px; width: 100%; } #Baslik { background-color:#3b5998;

Proje 1

}

#Menu

{

background-color: #89a5e0; height: 30px; width: 100%; } #Baslik { background-color:#3b5998; } #Icerik { padding:
background-color: #89a5e0;
height: 30px;
width: 100%;
}
#Baslik
{
background-color:#3b5998;
}
#Icerik
{
padding: 10px 20px;
}
#SonBlum
{
text-align: center;
font-weight: bold;
color: Gray;
text-decoration: none;
margin-top: 10px;
}
body
{
margin: 0 auto 0 auto;
padding: 0;
color: #000000;
text-align: center;
}
.SolMenu
{

width:20%;

float:left;

}

.KullaniciIcerik

auto 0 auto; padding: 0; color: #000000; text-align: center; } .SolMenu { width:20%; float:left; } .KullaniciIcerik

{

width:79%;

float:right;

font-size:small;

herkesburada.com

{ width:79%; float:right; font-size:small; herkesburada.com 11 font-family:Verdana; } .KullaniciIcerik a {

11

font-family:Verdana; } .KullaniciIcerik a { font-size:small; } a, a:link, a:visited, a:active { color: #000;
font-family:Verdana;
}
.KullaniciIcerik a
{
font-size:small;
}
a, a:link, a:visited, a:active
{
color: #000;
text-decoration: none;
}
a:hover
{
text-decoration: underline;
}
#Menu, #Menu a
{
color: #fff;
font-size: 18px;
font-weight: bold;
text-decoration: none;
}
#Menu .Separator
{
font-size: 18px;
}
#Menu .Text
{

font-size: 14px;

text-decoration: none; } #Menu .Separator { font-size: 18px; } #Menu .Text { font-size: 14px; } img

}

img

{

border: none;

12

12 Proje 1 } p { margin-top: 0; } h1, h2, h3 { margin: 0; margin-bottom:

Proje 1

}

p

{

margin-top: 0;

} h1, h2, h3 { margin: 0; margin-bottom: 2px; } h1 { font-size: 16px; }
}
h1, h2, h3
{
margin: 0;
margin-bottom: 2px;
}
h1
{
font-size: 16px;
}
h2
{
font-size: 15px;
color: #de4d52;
}
h3
{
font-size: 13px;
}
Liste 1.6: Genel.css.
Uygulama içerisine SiteResimleri isminde bir klasör ekleyin ve size verilen proje materyalleri içe-
risindeki SiteResimleri klasörü içindekileri bu klasöre kopyalayın. Tasarım tanımlandıktan sonra
her sayfada kullanılacak olan sayfanın en üstünde görünecek menüyü tanımlayın. Bu menu kulla-
nıcının rolüne göre değişiklik göstereceği için Login View kontrolü kullanın. Bilindiği gibi bu kontrol
üye girişi yapan ve yapmayan kişilere göre veya farklı rollere göre görünüm kazanır. Uygulamaya
Controls isminde bir klasör oluşturun ve içine UstMenu isminde bir Web User Control ekleyin.
(Liste 1.7)
<%@ Control Language=”C#” AutoEventWireup=”true”
CodeFile=”UstMenu.ascx.cs” Inherits=”Controls_Menu” %>

<table cellpadding=”0” cellspacing=”0” style=”width: 700px; height: 30px;”>

<tr>

<td style=”width: 500px; vertical-align: middle;”>

&nbsp;

700px; height: 30px;”> <tr> <td style=”width: 500px; vertical-align: middle;”> &nbsp;

herkesburada.com

herkesburada.com 13 <a id=”A1” href=”~/” runat=”Server”>Ana Sayfa</a> <span

13

<a id=”A1” href=”~/” runat=”Server”>Ana Sayfa</a> <span class=”Separator”>|</span>&nbsp;

<asp:LoginView runat=”server” ID=”lv1”>

<AnonymousTemplate>

<a id=”A4” href=”~/Login.aspx” runat=”Server”>Giriş</a>

</AnonymousTemplate>

<LoggedInTemplate> </LoggedInTemplate> <RoleGroups> <asp:RoleGroup Roles=”Admin”>
<LoggedInTemplate>
</LoggedInTemplate>
<RoleGroups>
<asp:RoleGroup Roles=”Admin”>
<ContentTemplate>
Yönetim</a>
</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
{

<asp:LinkButton ID=”lnkLogout” runat=”server” OnClick=”lnkLogout_Click” >Çıkış</asp:LinkButton>

>Çıkış</asp:LinkButton> <asp:LinkButton ID=”lnkLogout” runat=”server”

<asp:LinkButton ID=”lnkLogout” runat=”server” OnClick=”lnkLogout_Click” >Çıkış</asp:LinkButton>

<span class=”Separator”>|</span> <a id=”A5” href=” / Admin/default.aspx” runat=”Server”>

</td>

<td style=”width: 200px; text-align: right; vertical-align:

middle;”>

</td>

</tr>

</table>

Liste 1. 7: Ustmenu.ascx html tasarımı.

Oluşturulan üst menü kullanıcıların giriş yapmalarını sağlayacak, eğer admin rol grubunda ise bu gruba ait özel bir link çıkartmayı sağlayacak.

lv1 ismindeki Login View kontrolü içinde standart haricinde bir de admin rolündeki kullanıcılar için bir template oluşturulmuştur. Admin rolüne sahip kullanıcılar, admin klasörüne yönlendirilecek.

Çıkış butonuna tıklandığı zaman çıkış yapabilmek için lnkLogout button kontrolünün Click olayın- da kullanıcı çıkış işlemini yaptırın. (Web User Control’ün kod dosyası - Liste 1.8.)

protected void lnkLogout_Click(object sender, EventArgs e)

FormsAuthentication.SignOut();

Session.Clear();

Response.Redirect(“~/default.aspx”);

}

Liste 1.8: lnkLogout linkbutton kontrolü Click olayı.

Session.Clear(); Response.Redirect(“~/default.aspx”); } Liste 1.8: lnkLogout linkbutton kontrolü Click olayı.

14

14 Proje 1 Uygulamanın tasarımda tek bir arayüz kullanabilmek için Ajax Master Page ekleyin ve ismini

Proje 1

Uygulamanın tasarımda tek bir arayüz kullanabilmek için Ajax Master Page ekleyin ve ismini her- kesburada.master olarak belirleyin ve Liste 1.9’da belirtilen tasarımı yapın.

<%@ Master Language=”C#” AutoEventWireup=”true” CodeFile=”herkesburada.master.cs” Inherits=”herkesburada” %>

<%@ Register Src=”Controls/UstMenu.ascx” TagName=”Menu” TagPrefix=”uc1” %> <!DOCTYPE html PUBLIC
<%@ Register Src=”Controls/UstMenu.ascx” TagName=”Menu”
TagPrefix=”uc1” %>
<!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 id=”Head1” runat=”server”>
<title>Herkes Burada</title>
<link href=”Style/Genel.css” rel=”stylesheet” type=”text/css”
/>
</head>
<body>
<form id=”form1” runat=”server”>
<div id=”SayfaAna”>
<div id=”Baslik”>
<img src=”~/SiteResimleri/Logo.gif” runat=”server”
id=”imgLogo” alt=”Herkes Burada” /></div>
<div id=”Menu”>
<uc1:Menu ID=”Menu1” runat=”server” />
<asp:ScriptManager ID=”ScriptManager1” runat=”server”>
</asp:ScriptManager>
</div>
<div id=”Icerik”>
<asp:ContentPlaceHolder ID=”AnaIcerik” runat=”server”>
</asp:ContentPlaceHolder>
</div>
</div>
<div id=”SonBolum”>
<!-- Daha sonradan buraya copyright bilgileri gelebilir. --
>
</div>
</form>
</body>
</html>

Liste 1.9: herkesburada.master dosyası tasarımı.

Herkesburada.master master sayfasının UstMenu.ascx user control’ü eklenmiş ekran görüntüsü Şekil 1.13’de belirtilmiştir.

master sayfasının UstMenu.ascx user control’ü eklenmiş ekran görüntüsü Şekil 1.13’de belirtilmiştir.

herkesburada.com

herkesburada.com 15 Şekil 1.13: herkesburada.master sayfa tasarımı. Bu aşamadan sonra uygulamaya eklenecek tüm Ajax

15

herkesburada.com 15 Şekil 1.13: herkesburada.master sayfa tasarımı. Bu aşamadan sonra uygulamaya eklenecek tüm Ajax

Şekil 1.13: herkesburada.master sayfa tasarımı.

Bu aşamadan sonra uygulamaya eklenecek tüm Ajax Web Form’larını herkesburada.master dosyasından türetin. Yeni bir
Bu aşamadan sonra uygulamaya eklenecek tüm Ajax Web Form’larını
herkesburada.master dosyasından türetin. Yeni bir Ajax Web Form ek-
lerken master page seçtirip herkesburada.master dosyasını seçin. Kul-
lanıcıların kayıt olabilmelelerini sağlamak için kayit.aspx isminde bir Ajax
Web Form ekleyin.
Web Form eklerken
master page seçtirme-
yi unutmayın.
kayit.aspx içerisine bir fieldset ekleyin. Eklenecek fieldset’i Content Place Holder içerisine ekleyi
unutmayın.
<fieldset style=”width: 320px; height: 260px”>
<legend>Yeni Üye?</legend>
</fieldset>
Eklenen bu fieldset içerisine Create User Wizard kontrolü ekleyin. ID özelliğini KullaniciKayit ola-
rak değiştirin. Özelliklerinde Türkçeleştirilebilen tüm özellikleri Türkçeleştirin. Örneğin Password-
LabelText özelliğini Şifre olarak değiştirin. Ek olarak Tablo 1.2’deki özellikleri atayın.
Tablo 1.2: CreateUserWizard Kontrolünde Değiştirikecek Özellikler
Özellik
Değer
ContinueDestinationPageUrl
~/kullanici/default.aspx
Kayit.aspx formunun tasarımı Şekil 1.14’deki gibidir.
Şekil 1.14: Kayit.aspx sayfası.
Uygulama içerisinde 2 rol kullanılacak. Kayıt olan kullanıcının Standart rol grubuna alınması için
kayıt esnasında kayıt olan kullanıcıyı bu gruba dahil edin. Bunun için CreateUserWizard kontro-
lünün CreatedUser olayında kullanıcıyı standart rol grubuna alın.

protected void KullaniciKayit_CreatedUser(object sender, EventArgs

e)

{

kullanıcıyı standart rol grubuna alın. protected void KullaniciKayit_CreatedUser(object sender, EventArgs e) {

16

16 Proje 1 MembershipUser user = Membership.GetUser(KullaniciKayit. UserName);

Proje 1

MembershipUser user = Membership.GetUser(KullaniciKayit. UserName);

Roles.AddUserToRole(KullaniciKayit.UserName, “Standart”);

Membership.UpdateUser(user);

}

Liste 1.10: Kayıt olan kullanıcıyı standart rol grubuna alma kodu. Kayıt olan kullanıcının giriş yapmasını
Liste 1.10: Kayıt olan kullanıcıyı standart rol grubuna alma kodu.
Kayıt olan kullanıcının giriş yapmasını sağlayacak olan Login.aspx sayfası için uygulamaya Web
Form ekleyin ve ismini login.aspx olarak belirleyin. Kayit.aspx sayfasındaki gibi fieldset ekleyin
ve içerisine Login kontrolü atın. Türkçeleştirilebilen özellikleri Türkçeleştirin ve ek olarak Tablo
1.3‘deki özellikleri atayın.
Tablo 1.3: Login.aspx Sayfası Üzerindeki Login Kontrolüne Eklenecek Özellikler
Özellik
Değer
CreateUserText
Beni de aranıza alın
CreateUserUrl
~/kayit.aspx
PasswordRecoveryText
Şifremi Unuttum
PasswordRecoveryUrl
~/sifrehatirlat.aspx
Login.aspx sayfasının çıktısı Şekil 1.15‘de gösterilmiştir.
Şekil 1.15: Login.aspx sayfasının tasarım görünümü.
Uygulamaya sifrehatirlat.aspx isimli bir tane Web Form ekleyin. Sayfadaki Content’e Password-
Recovery kontrol ekliyin. Türkçeleştirilebilen özellikleri Türkçeleştirin. Sifrehatirlat.aspx sayfasının
görüntüsü Şekil 1.16’da gösterilmiştir.

Şekil 1.16: SifreHatirlat.aspx sayfasının tasarım görünümü.

görüntüsü Şekil 1.16’da gösterilmiştir. Şekil 1.16: SifreHatirlat.aspx sayfasının tasarım görünümü.

herkesburada.com

herkesburada.com 17 Bir ziyaretçi web sitesine ilk girdiği zaman kullanıcıyı karşılayacak olan default.aspx

17

Bir ziyaretçi web sitesine ilk girdiği zaman kullanıcıyı karşılayacak olan default.aspx sayfasını uygulamaya ekleyin.

<%@ Page Language=”C#” MasterPageFile=”~/herkesburada.master” AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”_ Default” Title=”Herkesburada.com” %>

<asp:Content ID=”Content1” ContentPlaceHolderID=”AnaIcerik” Runat=”Server”>

<asp:Panel ID=”Panel1” runat=”server” <p> &nbsp;</p> <p> göz
<asp:Panel ID=”Panel1” runat=”server”
<p>
&nbsp;</p>
<p>
göz atın.&nbsp;</font></p>
<center>
</center>
</asp:Panel></center>
{
if (User.Identity.IsAuthenticated)
Response.Redirect(@”~\kullanici\default.aspx”);
}
{
Response.Redirect(“login.aspx”);
}

<center>

CssClass=”AnaIcerik” Height=”100%” Width=”70%”>

<font style=”font-size: small; color: gray; font- family: Verdana”>&nbsp;Album ouşturun,

arkadaşlarınız ile mesajlaşın, yeni arkadaşlar bulun, profil güncelleyin ve albumlere

<asp:Button ID=”btnKaydol” runat=”server” BackColor=”Green” Font-Names=”Verdana” Font-Size=”Small”

ForeColor=”White” Text=”Aramıza Katıl” OnClick=”btnKaydol_Click” />

</asp:Content>

Liste 1.11: Default.aspx html tasarım görünümü.

btnKaydol button kontrolünün Click olayında giriş sayfasına yönlendirme yapın. Load olayında ise eğer kullanıcı giriş yapmışsa Kullanici klasörüne yönlendirin.

protected void Page_Load(object sender, EventArgs e)

protected void btnKaydol_Click(object sender, EventArgs e)

Liste 1.12: Default.aspx kod satırı.

sender, EventArgs e) protected void btnKaydol_Click(object sender, EventArgs e) Liste 1.12: Default.aspx kod satırı.

18

18 Proje 1 &nbsp;</center> Aradığınız sayfaya ulaşılamıyor. &nbsp;</center>

Proje 1

18 Proje 1 &nbsp;</center> Aradığınız sayfaya ulaşılamıyor. &nbsp;</center>
&nbsp;</center> Aradığınız sayfaya ulaşılamıyor.
&nbsp;</center>
Aradığınız sayfaya ulaşılamıyor.

&nbsp;</center>

<center>

<center>

Hata oluştu ve yöneticiye bildirildi.

<br />

</center></font>

Şekil 1.17: Default.aspx sayfa tasarım görünümü.

Şekil 1.17: Default.aspx sayfa tasarım görünümü. Web sitesinde oluşabilecek hataları kullanıcıya daha

Web sitesinde oluşabilecek hataları kullanıcıya daha güzel ve anlaşılır göstermek için hata say- faları yapın. Hata isminde bir klasör ekleyin. 404 hata kodu internet sitelerinde bulunamayan sayfaları, 403 nolu hata kodu ise erişilmeye yasak sayfaları belirtir. Bir web uygulamasında olu- şabilecek en sık hatalar 404 ve 403 hatalarıdır. Bu hatalar için ayrı birer sayfa, diğer tüm hatalar için ise tek bir sayfa yapabilirsiniz. Bu klasöre 404.aspx isminde bir Web Form ekleyin. Aradığınız sayfaya ulaşılamıyor hatasını kullanıcıya gösterin.

<%@ Page Language=”C#” MasterPageFile=”~/herkesburada.master” AutoEventWireup=”true” CodeFile=”404.aspx.cs” Inherits=”Hata_404” Title=”Untitled Page” %>

<asp:Content ID=”Content1” ContentPlaceHolderID=”AnaIcerik” Runat=”Server”>

<font color=”Red”>

<center>

</asp:Content>

Liste 1.13: 404.aspx hata sayfası html tasarımı.

Aynı şekilde 403.aspx sayfası ekleyin ve “Bu sayfaya erişim izniniz yok” mesajı verdirin. Bu ha- talar haricinde oluşabilecek her hata için genel bir generic hata sayfası yapın ve ismini hata.aspx verin.

<%@ Page Language=”C#” MasterPageFile=”~/herkesburada.master” AutoEventWireup=”true” CodeFile=”hata.aspx.cs” Inherits=”Hata_ hata” Title=”Untitled Page” %>

<asp:Content ID=”Content1” ContentPlaceHolderID=”AnaIcerik” Runat=”Server”>

<font color=”Red”>

<center>

&nbsp;</center>

<center>

Runat=”Server”> <font color=”Red”> <center> &nbsp;</center> <center>

herkesburada.com

&nbsp;</center>

<center>

Hata oluştu ve yöneticiye bildirildi.

<br />

İşleminizi tekrar deneyin.

</center></font>

</customErrors> <authorization> <allow roles=”Standart” /> <allow roles=”Admin”
</customErrors>
<authorization>
<allow roles=”Standart” />
<allow roles=”Admin” />
<deny users=”?” />
</authorization>

<system.web>

</system.web>

</asp:Content>

Liste 1.14: Hata.aspx sayfası html tasarımı.

Liste 1.14: Hata.aspx sayfası html tasarımı. Web.config dosyasını açıp oluşturulan hata

Web.config dosyasını açıp oluşturulan hata sayfalarını tanıtın. Artık IIS kendi hata mesajları yeri- ne sizin özelleştirdiğiniz hata sayfalarını (custom error page) gösterecek.

<customErrors mode=”RemoteOnly” defaultRedirect=”~/Hata/hata. aspx”>

<error redirect=”~/Hata/404.aspx” statusCode=”404”/>

<error redirect=”~/Hata/403.aspx” statusCode=”403”/>

Liste 1.15: Web.Config CustomErrors düğümü.

Giriş yapan kullanıcıların erişeceği sayfaları Kullanıcı klasörü altında toplamak için uygulamaya Kullanici klasörü ekleyin. Eklenen klasöre ilk olarak web.config dosyası ekleyin ve sadece giriş yapmış kullanıcıların bu klasöre erişmesine izin verin.

<?xml version=”1.0” encoding=”utf-8”?>

<configuration>

</configuration>

Liste 1.16: Kullanıcı klasörü içerisindeki web.config dosyası.

Controls klasörü içerisine her sayfada görünecek olan sol menu için KullaniciSolMenu.ascx is- minde Web User Control ekleyin. Bu menüde kullanıcının profil resmi, sayfalarda gezinmesini sağlayacak Menu kontrolü ve kullanıcı aramasını sağlayacak arama bölümü olacak.

<%@ Control Language=”C#” AutoEventWireup=”true” CodeFile=”Kullan iciSolMenu.ascx.cs” Inherits=”Controls_KullaniciSolMenu” %>

<fieldset style=”height: auto; width: auto”>

<legend><font style=”font-size:smaller”>Bilgilerim</font></ legend>

<br />

<legend><font style=”font-size:smaller”>Bilgilerim</font></ legend> <br /> 19
<legend><font style=”font-size:smaller”>Bilgilerim</font></ legend> <br /> 19

19

20

20 Proje 1 <a href=”profilresmi.aspx” title=”Resminizi Guncelleyin”><c enter><asp:Image

Proje 1

<a href=”profilresmi.aspx” title=”Resminizi Guncelleyin”><c enter><asp:Image ID=”imgUser” runat=”server” AlternateText=”Uye Resminiz” GenerateEmptyAlternateText=”True” /></center></a><br />

<font style=”font-size:x-small”>&nbsp; Hoşgeldin</font>

<asp:LoginName ID=”LoginName1” runat=”server” Font- Names=”Verdana” Font-Size=”X-Small”
<asp:LoginName ID=”LoginName1” runat=”server” Font-
Names=”Verdana” Font-Size=”X-Small”
ForeColor=”Blue” />
</fieldset>
<br />
<asp:Menu ID=”Menu1” runat=”server” BackColor=”#E3EAEB”
DynamicHorizontalOffset=”2”
Font-Names=”Verdana” Font-Size=”Small” ForeColor=”#666666”
Height=”115px” StaticSubMenuIndent=”10px”
Width=”158px”>
<StaticMenuItemStyle HorizontalPadding=”5px”
VerticalPadding=”2px” />
<DynamicHoverStyle BackColor=”#666666” ForeColor=”White” />
<DynamicMenuStyle BackColor=”#E3EAEB” />
<StaticSelectedStyle BackColor=”#1C5E55” />
<DynamicSelectedStyle BackColor=”#1C5E55” />
<DynamicMenuItemStyle HorizontalPadding=”5px”
VerticalPadding=”2px” />
<Items>
<asp:MenuItem Text=”Mesajlarım” Value=”Mesajlarım”
NavigateUrl=”~/Kullanici/mesajlarim.aspx”></asp:MenuItem>
<asp:MenuItem Text=”Arkadaşlarım” Value=”Arkadaşlarım”
NavigateUrl=”~/Kullanici/arkadaslarim.aspx”></asp:MenuItem>
<asp:MenuItem Text=”Albumlerim” Value=”Albumlerim”
NavigateUrl=”~/Kullanici/albumlerim.aspx”></asp:MenuItem>
<asp:MenuItem Text=”Bilgilerim” Value=”Bilgilerim”
NavigateUrl=”~/Kullanici/bilgiler.aspx”></asp:MenuItem>
</Items>
<StaticHoverStyle BackColor=”#666666” ForeColor=”White” />
</asp:Menu>
<br />
<fieldset style=”height: auto; width: auto”>
<legend><font style=”font-size:smaller”>Üye Ara</font></legend>
<asp:TextBox ID=”txtRumuz” runat=”server” Width=”125px”></
asp:TextBox><br />
&nbsp;<asp:Button ID=”btnAra” runat=”server” Text=”Ara” /><br
/>

<asp:HyperLink ID=”HyperLink1” runat=”server” Font- Size=”Small” ForeColor=”Blue”

NavigateUrl=”~/kullanici/detayliarama.aspx”>Detaylı Arama</asp:HyperLink><br /></fieldset>

&nbsp;<br />

<br />

Arama</asp:HyperLink><br /></fieldset> &nbsp;<br /> <br />

KullaniciSolMenu.ascx kontrolünde en üstte bir fieldset tanımlandı ve içerisine kullanıcının resimini gösterebilmek için Image kontrolü ek- lendi. Hemen altında karşılama mesajı olarak Hoşgeldiniz yazıldı ve LoginName kontrolü eklendi.

herkesburada.com

LoginName kontrolü otu- rum açan kullanıcının otu- rum adını almayı sağlar.

açan kullanıcının otu - rum adını almayı sağlar. 21 Orta bölümde kullanıcıların sayfalarda gezinmelerini
açan kullanıcının otu - rum adını almayı sağlar. 21 Orta bölümde kullanıcıların sayfalarda gezinmelerini

21

Orta bölümde kullanıcıların sayfalarda gezinmelerini sağlamak için Menu kontrolü eklendi ve ge- rekli sayfaları
Orta bölümde kullanıcıların sayfalarda gezinmelerini sağlamak için Menu kontrolü eklendi ve ge-
rekli sayfaları link verildi. En altta ise kullanıcıların site içerisinde arama yapmalarını sağlamak için
arama bölümü yapıldı. Kullanıcı ilk oturum açtığında Profile bilgilerinden ProfilResmini belirtme-
miş olacak. Eğer kendisi resim belirtmemiş ise otomatik olarak resimyok.jpg dosyası kullanıcının
resmi yerine gösteriyoruz. Kullanıcı resimlerini depolomak için uygulama içerisine UyeResimleri
klasörü ekleyin. Bu klasör sitedeki kullanıcıların resimlerini tutucak, dolayısıyla resimler daha dü-
zenli tutulmuş olacak. Klasör içerisine resimyok.jpg resmini ekleyin. Bu resim profil bilgisini dol-
durmamış kullanıcının resminde gösterilecek. Bundan sonra oluşturulacak her sayfada bu menu
kullanılacak.
protected void Page_Load(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(Profile.ProfilResmi))
imgUser.ImageUrl = Server.MapPath(“~/UyeResimleri/
resimyok.jpg”);
else
imgUser.ImageUrl = Server.MapPath(“~/UyeResimleri/”)
+ Profile.ProfilResmi;
}
Eklenen
her
sayfayı
herkesburada.master
sayfasından türetin.
Liste 1.17: Default.aspx Page_Load olayı.
Kullanıcı klasörüne default.aspx isminde bir Web Form ekleyin.
Oluşan sayfanın kullanıcıya hoş görünebilmesi için Content’i tasarımsal olarak ikiye bölün, yani
div kullanarak şekillendirin. Solda oluşan div içerisine biraz önce oluşturduğunuz KullaniciSolMe-
nu.ascx kontrolünü ekleyin.
<%@ Page Language=”C#” MasterPageFile=”~/herkesburada.
master” AutoEventWireup=”true” CodeFile=”Default.aspx.cs”
Inherits=”Kullanici_Default” Title=”Üye Ana Sayfa” %>
<%@ Register Src=”
/Controls/KullaniciSolMenu.ascx”
TagName=”Kul
laniciSolMenu” TagPrefix=”uc1” %>
<asp:Content ID=”Content1” ContentPlaceHolderID=”AnaIcerik”
Runat=”Server”>
<div class=”SolMenu”>
<uc1:KullaniciSolMenu ID=”KullaniciSolMenu1” runat=”server”
/>

</div>

<div class=”KullaniciIcerik”>

</div>

</asp:Content>

Liste 1.18: Default.aspx sayfası html tasarımı.

class=”KullaniciIcerik”> </div> </asp:Content> Liste 1.18: Default.aspx sayfası html tasarımı.

22

22 Proje 1 Bundan sonraki her sayfada aynı taslağı kullanın. Eklenen her sayfayı Liste 1.18‘de belirtidiği

Proje 1

Bundan sonraki her sayfada aynı taslağı kullanın. Eklenen her sayfayı Liste 1.18‘de belirtidiği gibi 2 parçaya bölün ve sol tarafa KullaniciMenu.ascx kontrolünü ekleyin.

ve sol tarafa KullaniciMenu.ascx kontrolünü ekleyin. Şekil 1.18: Kullanici/default.aspx sayfa tasarım
ve sol tarafa KullaniciMenu.ascx kontrolünü ekleyin. Şekil 1.18: Kullanici/default.aspx sayfa tasarım
ve sol tarafa KullaniciMenu.ascx kontrolünü ekleyin. Şekil 1.18: Kullanici/default.aspx sayfa tasarım

Şekil 1.18: Kullanici/default.aspx sayfa tasarım görüntüsü.

Kullanici klasörü içerisine Mesajlarim.aspx isminde bir Web Form Ekleyin. Kullanıcının gelen ve giden mesajlarının liste- leneceği sayfası olacak. Sayfayı default.aspx’teki gibi iki div içerisine bölün.

Default.aspx sayfasının en üstünde be- lirtilen declaration haricindeki tüm kod- ları koplayalıp yapıştırabilirsiniz.

<%@ Register Assembly=”AjaxControlToolkit” Namespace=”AjaxControl Toolkit” TagPrefix=”cc1” %>

<%@ Register Src=”~/Controls/KullaniciSolMenu.ascx” TagName=”Kull aniciSolMenu” TagPrefix=”uc1” %>

<asp:Content ID=”Content1” ContentPlaceHolderID=”AnaIcerik” Runat=”Server”>

<div class=”SolMenu”>

/>

<uc1:KullaniciSolMenu ID=”KullaniciSolMenu1” runat=”server”

</div>

<script language=”javascript” type=”text/javascript”>

function YeniMesajGoster()

{

window.open(‘yenimesaj.aspx’,’yenimesaj’,’width=350,h

eight=250’);

}

</script>

YeniMesajGoster() { window.open(‘yenimesaj.aspx’,’yenimesaj’,’width=350,h eight=250’); } </script>

<div class=”KullaniciIcerik”>

<br />

herkesburada.com

<br /> herkesburada.com 23 <asp:LinkButton ID=”lnkYeniMesaj”

23

<asp:LinkButton ID=”lnkYeniMesaj” OnClientClick=”YeniMe sajGoster(); return false;” runat=”server” ForeColor=”Blue” Width=”67px”>Yeni Mesaj</asp:LinkButton><br />

<asp:UpdatePanel ID=”UpdatePanel1” runat=”server”>

<ContentTemplate> <br /> <ContentTemplate> <Columns> SortExpression=”Tarih” />
<ContentTemplate>
<br />
<ContentTemplate>
<Columns>
SortExpression=”Tarih” />
<ItemTemplate>

<asp:TemplateField ShowHeader=”False”>

<cc1:TabContainer ID=”TabContainer1” runat=”server” ActiveTabIndex=”0” Width=”625px”>

ActiveTabIndex=”0” Width=”625px”> <cc1:TabPanel ID=”TabPanel1” runat=”server”

<cc1:TabPanel ID=”TabPanel1” runat=”server”

HeaderText=”TabPanel1”>

<asp:GridView ID=”gelenMesajlar” runat=”server” AllowPaging=”True” AllowSorting=”True”

AutoGenerateColumns=”False” BackColor=”White” BorderColor=”#CCCCCC” BorderStyle=”None”

EmptyDataText=”Gelen Mesajınız bulunmuyor ForeColor=”Black” GridLines=”Horizontal”

Width=”100%” OnRowDeleting=”gelenMesajlar_ RowDeleting” OnRowDataBound=”gelenMesajlar_RowDataBound”>

/>

BorderWidth=”1px” CellPadding=”4” DataKeyNames=”M esajId,OkunduMu” DataSourceID=”SqlDataSource1”

<FooterStyle BackColor=”#CCCC99” ForeColor=”Black”

<asp:HyperLinkField DataNavigateUrlFields=” UserName” DataNavigateUrlFormatString=”~/kullanici/profildetay.

aspx?user={0}”

46;nderen” />

DataTextField=”UserName” HeaderText=”G&#2

<asp:HyperLinkField DataNavigateUrlFields =”MesajId” DataNavigateUrlFormatString=”~/kullanici/mesajoku.

aspx?mesaj={0}”

DataTextField=”Baslik” HeaderText=”Konu”

/>

<asp:BoundField DataField=”Tarih” DataFormatString=”{0:d}” HeaderText=”Tarih” HtmlEncode=”False”

<asp:LinkButton ID=”LinkButton1” OnClientClick=”return confirm(‘Mesajı silmek istediğinizden emin misiniz?’)” runat=”server” CausesValidation=”False” CommandName=”Delete”

Text=”Sil”></asp:LinkButton>

CommandName=”Delete” Text=”Sil”></asp:LinkButton> </ItemTemplate> </asp:TemplateField>

</ItemTemplate>

</asp:TemplateField>

24

24 Proje 1 </Columns> <SelectedRowStyle BackColor=”#CC3333” Font- Bold=”True” ForeColor=”White”

Proje 1

</Columns>

<SelectedRowStyle BackColor=”#CC3333” Font- Bold=”True” ForeColor=”White” />

<PagerStyle BackColor=”White” ForeColor=”Black” HorizontalAlign=”Right” />

<HeaderStyle BackColor=”#333333” Font-Bold=”True” ForeColor=”White” />

</asp:GridView> </ContentTemplate> <HeaderTemplate> Gelen Mesajlarım
</asp:GridView>
</ContentTemplate>
<HeaderTemplate>
Gelen Mesajlarım
</HeaderTemplate>
</cc1:TabPanel>
<ContentTemplate>
OnRowDeleting=”gidenMesajlar_
<Columns>
<asp:TemplateField
<ItemTemplate>

EmptyDataText=”Giden mesajınız ForeColor=”Black” GridLines=”Horizontal”

ForeColor=”Black” GridLines=”Horizontal” <cc1:TabPanel ID=”TabPanel2” runat=”server”

<cc1:TabPanel ID=”TabPanel2” runat=”server”

HeaderText=”TabPanel2”>

<asp:GridView ID=”gidenMesajlar” runat=”server” AllowPaging=”True” AllowSorting=”True”

AutoGenerateColumns=”False” BackColor=”White” BorderColor=”#CCCCCC” BorderStyle=”None”

BorderWidth=”1px” CellPadding=”4” DataKeyNames=”MesajId” DataSourceID=”SqlDataSource2”

bulunmuyor

RowDeleting” Width=”100%”>

ForeColor=”Black” />

<FooterStyle BackColor=”#CCCC99”

<asp:BoundField DataField=”UserName” HeaderText=”Kime” SortExpression=”Kimden” />

<asp:BoundField DataField=”Baslik” HeaderText=”Başlık” SortExpression=”Baslik” />

<asp:BoundField DataField=”Tarih” DataFormatString=”{0:d}” HeaderText=”Tarih” HtmlEncode=”False”

ShowHeader=”False”>

SortExpression=”Tarih” />

<asp:LinkButton ID=”LinkButton1” runat=”server” CausesValidation=”False” CommandName=”Delete”

OnClientClick=”return confirm(‘Mesajı silmek istediğinden emin misiniz?’)” Text=”Sil”></ asp:LinkButton>

</ItemTemplate>

</asp:TemplateField>

emin misiniz?’)” Text=”Sil”></ asp:LinkButton> </ItemTemplate> </asp:TemplateField>

herkesburada.com

</Columns>

<SelectedRowStyle BackColor=”#CC3333” Font-Bold=”True” ForeColor=”White” />

<PagerStyle BackColor=”White” ForeColor=”Black” HorizontalAlign=”Right” />

<HeaderStyle BackColor=”#333333” Font-Bold=”True” ForeColor=”White” />

</asp:GridView> <InsertParameters>
</asp:GridView>
<InsertParameters>

<asp:Parameter Name=”Kime”

<asp:SqlDataSource ID=”SqlDataSource2” runat=”server” ConflictDetection=”CompareAllValues”

<asp:SqlDataSource ID=”SqlDataSource2” runat=”server” ConflictDetection=”CompareAllValues”

ConnectionString=”<%$ ConnectionStrings:ConStrHerkesBurada %>” DeleteCommand=”DELETE

FROM [Mesajlar] WHERE [MesajId] = @original_MesajId AND [Kimden]

=

original_Baslik AND [MesajIcerik] = @original_MesajIcerik AND [Tarih] = @original_Tarih “

@original_Kimden AND [Kime] = @original_Kime AND [Baslik] = @

InsertCommand=”INSERT INTO [Mesajlar] ([MesajId], [Kimden], [Kime], [Baslik], [MesajIcerik], [Tarih], [OkunduMu]) VALUES (@MesajId, @Kimden, @Kime, @Baslik, @ MesajIcerik, @Tarih)”

OldValuesParameterFormatString=”orig inal_{0}” SelectCommand=”SELECT [MesajId], [UserName], [Baslik],

[MesajIcerik], [Tarih] &#13;&#10;FROM [Mesajlar] m &#13;&#10;Inner Join aspnet_Users a on a.UserId = m.Kime&#13;&#10;WHERE ([Kimden]

=

UpdateCommand=”UPDATE [Mesajlar] SET [Kimden] = @Kimden, [Kime] = @Kime, [Baslik] = @Baslik, [MesajIcerik] = @MesajIcerik, [Tarih] = @Tarih WHERE [MesajId] = @original_MesajId AND [Kimden] = @original_Kimden AND [Kime] = @ original_Kime AND [Baslik] = @original_Baslik AND [MesajIcerik] = @original_MesajIcerik AND [Tarih] = @original_Tarih”>

@Kimden And GondericiyeGosterme=’False’) ORDER BY [Tarih]”

Type=”Object” />

Type=”Object” />

Type=”Object” />

Type=”String” />

Type=”String” />

<asp:Parameter Name=”MesajId”

<asp:Parameter Name=”Kimden”

<asp:Parameter Name=”Baslik”

<asp:Parameter Name=”MesajIcerik”

<asp:Parameter Name=”Tarih”

Type=”DateTime” />

</InsertParameters>

<SelectParameters>

</InsertParameters> <SelectParameters> 25 <asp:SessionParameter Name=”Kimden”

25

<asp:SessionParameter Name=”Kimden” SessionField=”UserId” />

25 <asp:SessionParameter Name=”Kimden” SessionField=”UserId” /> </SelectParameters>

</SelectParameters>

26

26 Proje 1 Type=”Object” /> Type=”Object” /> <UpdateParameters> <asp:Parameter

Proje 1

Type=”Object” />

Type=”Object” />

<UpdateParameters> <asp:Parameter Name=”Kimden”

<asp:Parameter Name=”Kime”

<asp:Parameter Name=”Baslik”

Type=”String” />

Type=”String” />

Type=”DateTime” />

Type=”Boolean” />

MesajId” Type=”Object” />

Kimden” Type=”Object” />

Kime” Type=”Object” />

Baslik” Type=”String” />

MesajIcerik” Type=”String” />

Tarih” Type=”DateTime” />

Type=”String” /> Tarih” Type=”DateTime” /> </DeleteParameters> </asp:SqlDataSource>

</DeleteParameters> </asp:SqlDataSource> </ContentTemplate> <HeaderTemplate> Giden Mesajlarım </HeaderTemplate>

<asp:Parameter Name=”MesajIcerik”

<asp:Parameter Name=”MesajIcerik” <asp:Parameter Name=”Tarih” <asp:Parameter

<asp:Parameter Name=”Tarih”

<asp:Parameter Name=”OkunduMu”

<asp:Parameter Name=”original_

<asp:Parameter Name=”original_

<asp:Parameter Name=”original_

<asp:Parameter Name=”original_

<asp:Parameter Name=”original_

<asp:Parameter Name=”original_

</UpdateParameters> <DeleteParameters> <asp:Parameter Name=”original_

<asp:Parameter Name=”original_

<asp:Parameter Name=”original_

<asp:Parameter Name=”original_

<asp:Parameter Name=”original_

<asp:Parameter Name=”original_

MesajId” Type=”Object” />

Kimden” Type=”Object” />

Kime” Type=”Object” />

Baslik” Type=”String” />

MesajIcerik” Type=”String” />

Tarih” Type=”DateTime” />

</cc1:TabPanel>

</cc1:TabContainer><br />

/> Tarih” Type=”DateTime” /> </cc1:TabPanel> </cc1:TabContainer><br />

herkesburada.com

herkesburada.com 27 <asp:SqlDataSource ID=”SqlDataSource1” runat=”server”

27

<asp:SqlDataSource ID=”SqlDataSource1” runat=”server” ConflictDetection=”CompareAllValues”

ConnectionString=”<%$ ConnectionStrings:

ConStrHerkesBurada %>”

DeleteCommand=”DELETE FROM [Mesajlar] WHERE [MesajId] = @original_MesajId AND [Kimden] = @original_Kimden AND [Kime] = @original_Kime AND [Baslik] = @original_Baslik AND [MesajIcerik] = @original_MesajIcerik AND [Tarih] = @original_ Tarih “

<DeleteParameters> <asp:Parameter Name=”original_Kimden” <asp:Parameter Name=”original_Kime”
<DeleteParameters>
<asp:Parameter Name=”original_Kimden”
<asp:Parameter Name=”original_Kime”
<asp:Parameter Name=”original_Baslik”
<asp:Parameter Name=”original_Tarih”
</DeleteParameters>
<UpdateParameters>

<asp:Parameter Name=”original_MesajId”

InsertCommand=”INSERT INTO [Mesajlar] ([MesajId], [Kimden], [Kime], [Baslik], [MesajIcerik], [Tarih]) VALUES (@ MesajId, @Kimden, @Kime, @Baslik, @MesajIcerik, @Tarih)”

MesajId, @Kimden, @Kime, @Baslik, @MesajIcerik, @Tarih)” OldValuesParameterFormatString=”origi nal_{0}”

OldValuesParameterFormatString=”origi nal_{0}” SelectCommand=”SELECT [MesajId], [UserName], [Baslik], [MesajIcerik], [Tarih] ,OkunduMu&#13;&#10;FROM [Mesajlar] m &#13;&#10;Inner Join aspnet_Users a on a.UserId = m.Kimden&#13;&#10;WHERE ([Kime] = @Kime And AliciyaGosterme=’False’) ORDER BY OkunduMu,[Tarih] &#13;&#10;”

UpdateCommand=”UPDATE [Mesajlar] SET [Kimden] = @Kimden, [Kime] = @Kime, [Baslik] = @Baslik, [MesajIcerik] = @ MesajIcerik, [Tarih] = @Tarih WHERE [MesajId] = @original_MesajId AND [Kimden] = @original_Kimden AND [Kime] = @original_Kime AND [Baslik] = @original_Baslik AND [MesajIcerik] = @original_ MesajIcerik AND [Tarih] = @original_Tarih AND [OkunduMu] = @ original_OkunduMu”>

Type=”Object” />

Type=”Object” />

Type=”Object” />

Type=”String” />

<asp:Parameter Name=”original_MesajIcerik”

Type=”String” />

Type=”DateTime” />

<asp:Parameter Name=”Kimden” Type=”Object” />

<asp:Parameter Name=”Kime” Type=”Object” />

<asp:Parameter Name=”Baslik” Type=”String” />

<asp:Parameter Name=”MesajIcerik”

Type=”String” />

<asp:Parameter Name=”Tarih” Type=”DateTime”

/>

Name=”MesajIcerik” Type=”String” /> <asp:Parameter Name=”Tarih” Type=”DateTime” />

28

28 Proje 1 <asp:Parameter Name=”original_MesajId” Type=”Object” /> <asp:Parameter

Proje 1

<asp:Parameter Name=”original_MesajId”

Type=”Object” />

<asp:Parameter Name=”original_Kimden”

Type=”Object” />

<asp:Parameter Name=”original_Kime”

Type=”Object” />

<asp:Parameter Name=”original_Baslik” <asp:Parameter Name=”original_Tarih” </UpdateParameters>
<asp:Parameter Name=”original_Baslik”
<asp:Parameter Name=”original_Tarih”
</UpdateParameters>
<SelectParameters>
</SelectParameters>
<InsertParameters>
<asp:Parameter Name=”MesajIcerik”
</InsertParameters>
</asp:SqlDataSource>
</ContentTemplate>

</asp:UpdatePanel>

&nbsp;&nbsp;<br />

<br />

&nbsp;&nbsp;<br /> <br /> Type=”String” /> Type=”String” />

Type=”String” />

Type=”String” />

Type=”DateTime” />

<asp:Parameter Name=”original_MesajIcerik”

<asp:Parameter Name=”original_OkunduMu” />

<asp:SessionParameter Name=”Kime” SessionField=”UserId” Type=”Object” />

<asp:Parameter Name=”MesajId” Type=”Object”

<asp:Parameter Name=”Kimden” Type=”Object” />

<asp:Parameter Name=”Kime” Type=”Object” />

<asp:Parameter Name=”Baslik” Type=”String” />

<asp:Parameter Name=”Tarih” Type=”DateTime”

/>

Type=”String” />

/>

</div>

</asp:Content>

Liste 1.19: Mesajlarim.aspx html tasarımı.

Eklenen bu formun en üst kısmında bir link button kontrolü bulunur. Bu link butonuna tıklandığı zaman yeni bir pencerede popup olarak yeni mesaj gönderme sayfası açılacak. Bu link’in hemen altında bir update panel bulunur. Update panel içerisinde Tab Container kontrolü bulunur. Tab Container kontrolü içerisinde 2 adet tab oluşturuldu ve bu tab’lardan birinde gelen mesajlar, diğe- rinde ise giden mesajlar listelendi. Gelen mesaj eğer okunmamış ise mesajın bulunduğu satırın stili değiştirilecek. Bunun için gelenMesajlar grid view kontrolünün RowDataBound olayında me- sajın okunup okunmadığı bilgisini alıp gerekli değişikliği yapın.

view kontrolünün RowDataBound olayında me- sajın okunup okunmadığı bilgisini alıp gerekli değişikliği yapın.

herkesburada.com

herkesburada.com 29 protected void gelenMesajlar_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType

29

protected void gelenMesajlar_RowDataBound(object sender, GridViewRowEventArgs e)

{

if (e.Row.RowType != DataControlRowType.DataRow)

return;

if (!neymis) { e.Row.BackColor = Color.Brown; e.Row.ForeColor = Color.White; } } {
if (!neymis)
{
e.Row.BackColor = Color.Brown;
e.Row.ForeColor = Color.White;
}
}
{
cmd.Parameters.AddWithValue(“@MesajId”, mesajId);
try
{
con.Open();
cmd.ExecuteNonQuery();
}
mesajId); try { con.Open(); cmd.ExecuteNonQuery(); } bool neymis = Convert.ToBoolean(gelenMesajlar.DataKeys[e.

bool neymis = Convert.ToBoolean(gelenMesajlar.DataKeys[e. Row.RowIndex][“OkunduMu”]) ;

Liste 1.20: Mesajlarim.aspx gelenMesajlar RowDataBound olayı.

Giden ve gelen mesajlarda silinme işleminde değişik bir sistem kullanılır. Bir mesaj geldiği zaman veritabanında tek bir satıra kayıt girilecek. Mesajı gönderen kişi gelen mesajlarından mesajı sil dediği zaman aslında bana gösterme demiş olacak. Mesaj gelen kişi gelen mesajı sil dediği za- man aslında bana gösterme demiş olacak. Eğer mesaj gerçekten silinirse gönderen veya alan kişi mesajı sildiği zaman diğer kişi mesajı görememiş olacak. O yüzden bir kullanıcı mesajı sil dediği zaman aslında o kullanıcıya mesajın gösterilip gösterilmeyeceği belirtilecek. Bu yüzden gelen ve giden mesajlar için silinme olayında gerekli mesajları güncelleyin.

protected void gelenMesajlar_RowDeleting(object sender, GridViewDeleteEventArgs e)

Guid mesajId = new Guid(gelenMesajlar.DataKeys[e. RowIndex].Value.ToString());

SqlConnection con = new SqlConnection(ConfigurationManage r.ConnectionStrings[“LocalSqlServer”].ConnectionString);

SqlCommand cmd = new SqlCommand(“Update mesajlar set AliciyaGosterme = ‘True’ Where MesajId = @MesajId”, con);

catch (SqlException ex)

{

throw ex;

}

finally

AliciyaGosterme = ‘True’ Where MesajId = @MesajId”, con); catch (SqlException ex) { throw ex; } finally

30

30 Proje 1 { con.Close(); } SqlDataSource1.DataBind(); } { cmd.Parameters.AddWithValue(“@MesajId”, mesajId); try {

Proje 1

{

con.Close();

}

SqlDataSource1.DataBind();

}

{ cmd.Parameters.AddWithValue(“@MesajId”, mesajId); try { con.Open(); cmd.ExecuteNonQuery(); } catch
{
cmd.Parameters.AddWithValue(“@MesajId”, mesajId);
try
{
con.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
throw ex;
}
finally
{
con.Close();
}
SqlDataSource2.DataBind();
}

protected void gidenMesajlar_RowDeleting(object sender, GridViewDeleteEventArgs e)

sender, GridViewDeleteEventArgs e) Guid mesajId = new Guid(gidenMesajlar.DataKeys[e.

Guid mesajId = new Guid(gidenMesajlar.DataKeys[e. RowIndex].Value.ToString());

SqlConnection con = new SqlConnection(ConfigurationManage r.ConnectionStrings[“LocalSqlServer”].ConnectionString);

SqlCommand cmd = new SqlCommand(“Update mesajlar set GondericiyeGosterme = ‘True’ Where MesajId = @MesajId”, con);

Liste 1.21: Mesajlarim.aspx gelen ve giden mesajların silinme olayı.

Mesajı alan kişi ve gönderen kişi birlikte silinme istediğinde bulunursa mesaj gerçekten veritaba- nından silinir. Bu yüzden veritabanı üzerine bu işlemi yapacak trigger’ı oluşturun. Liste 1.22’de belirtilmiştir.

USE herkesburadadb

GO

CREATE TRIGGER MesajSilici

ON Mesajlar

For Update

oluşturun. Liste 1.22’de belirtilmiştir. USE herkesburadadb GO CREATE TRIGGER MesajSilici ON Mesajlar For Update

herkesburada.com

AS

BEGIN

Declare @MesajId uniqueidentifier

Select @MesajId = MesajId From Inserted

uniqueidentifier Select @MesajId = MesajId From Inserted Delete From Mesajlar Where GondericiyeGosterme = ‘True’

Delete From Mesajlar Where GondericiyeGosterme = ‘True’

And AliciyaGosterme=’True’ And MesajId = @MesajId

END

And AliciyaGosterme=’True’ And MesajId = @MesajId END Liste 1.22: MesajSilici trigger kodu. Mesajlarim.aspx

Liste 1.22: MesajSilici trigger kodu.

Mesajlarim.aspx sayfası tasarımı Şekil 1.19’da belirtilmiştir.

sayfası tasarımı Şekil 1.19’da belirtilmiştir. Şekil 1.19: Mesajlarim.aspx sayfa tasarım görünümü.

Şekil 1.19: Mesajlarim.aspx sayfa tasarım görünümü.

Yeni mesaj gönderebilmek için Kullanici klasörü içerisine yenimesaj.aspx isimli bir sayfa ekleyin fakat bu sayfayı eklerken master page seçmeyin.

<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”yenimesaj. aspx.cs” Inherits=”Kullanici_yenimesaj” %>

<%@ Register Assembly=”AjaxControlToolkit” Namespace=”AjaxControl Toolkit” TagPrefix=”cc1” %>

<!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>Yeni Mesaj Gönder</title>

> <head runat=”server”> <title>Yeni Mesaj Gönder</title> 31
> <head runat=”server”> <title>Yeni Mesaj Gönder</title> 31

31

32

32 Proje 1 <link href=” css” /> </head> <body style=”margin-left:0;margin-top:0”>

Proje 1

<link href=” css” />

</head>

<body style=”margin-left:0;margin-top:0”>

/Style/Genel.css”

rel=”stylesheet” type=”text/

<form id=”form1” runat=”server”>

<div style=”text-align:left”> <table width=”300”> <tr> <td style=”width:
<div style=”text-align:left”>
<table width=”300”>
<tr>
<td style=”width: 55px”>
</td>
<td colspan=”2”>
<asp:ScriptManager ID=”ScriptManager1”
runat=”server”>
</asp:ScriptManager>
<cc1:AutoCompleteExtender
EnableCaching=”false”
id=”AutoCompleteExtender1”
MinimumPrefixLength=”2” runat=”server”
servicemethod=”GetCompletionList”
targetcontrolid=”txtKime”
UseContextKey=”true”
></cc1: AutoCompleteExtender>
</td>
<td style=”width: 100px”>
</td>
</tr>
<tr>
<td style=”width: 55px”>
Kime :
</td>
<td style=”width: 69px”>
<asp:TextBox ID=”txtKime” runat=”server”></
asp:TextBox></td>
<td style=”width: 69px”>
</td>
<td style=”width: 100px”>
</td>

</tr>

<tr>

<td style=”width: 55px”>

Konu :

</td>

<td colspan=”3”>

</tr> <tr> <td style=”width: 55px”> Konu : </td> <td colspan=”3”>

herkesburada.com

herkesburada.com 33 <asp:TextBox ID=”txtBaslik” runat=”server”

33

<asp:TextBox ID=”txtBaslik” runat=”server”

Width=”100%”></asp:TextBox></td>

</tr>

<tr>

<td style=”width: 55px; height: 18px”

valign=”top”> Mesaj : </td> <td colspan=”3” style=”height: 18px”> <asp:TextBox
valign=”top”>
Mesaj :
</td>
<td colspan=”3” style=”height: 18px”>
<asp:TextBox ID=”txtMesaj” runat=”server”
Height=”107px” TextMode=”MultiLine” Width=”100%”></asp:TextBox></
td>
</tr>
<tr>
<td style=”width: 55px”>
</td>
<td style=”width: 69px”>
<asp:Button ID=”btnGonder” runat=”server”
Text=”Gönder” OnClick=”btnGonder_Click” />
</td>
<td style=”width: 69px”>
<asp:Button ID=”btnIptal” runat=”server”
Text=”İptal” CausesValidation=”False” OnClientClick=”javascript:
window.close();” /></td>
<td style=”width: 100px”>
</td>
</tr>
<tr>
<td style=”width: 55px; height: 18px”>
</td>
<td style=”width: 69px; height: 18px”>
&nbsp;</td>
<td style=”width: 69px; height: 18px”>
</td>
<td style=”width: 100px; height: 18px”>
</td>
</tr>
</table>
</div>

</form>

</body>

</html>

Liste 1.23: Yenimesaj.aspx.

</table> </div> </form> </body> </html> Liste 1.23: Yenimesaj.aspx.

34

34 Proje 1 Yeni mesaj göndermek için sayfaya bir scriptmanager ve bir autocompleteextender konrolü eklendi. Eğer

Proje 1

Yeni mesaj göndermek için sayfaya bir scriptmanager ve bir autocompleteextender konrolü eklendi. Eğer mesaj gönderilecek kişi kullanıcının arkadaşı ise otomatik olarak textbox altında çıkacak. Kullanıcı mesajı gidecek kişinin ismini yazdığı zaman tamamlama olmayacak. Mesaj gönderilecek kişi, mesajı gönderen kişinin arkadaşı olup olmadığını öğrenebilmesi için veritabanı üzerinde ArkadasListem isminde bir stored procedure oluşturun. Arkadaş listesi tek bir tabloda tanımlanıyor.

oluşturun. Arkadaş listesi tek bir tabloda tanımlanıyor. CREATE proc [ArkadasListem] ( @UserId uniqueidentifier ) As

CREATE proc [ArkadasListem]

(

@UserId uniqueidentifier

CREATE proc [ArkadasListem] ( @UserId uniqueidentifier ) As SELECT aspnet_Users.UserName , Kimin As KullaniciId

)

As

SELECT aspnet_Users.UserName , Kimin As KullaniciId

FROM ArkadasListesi INNER JOIN aspnet_Users

ON ArkadasListesi.Kimin = aspnet_Users.UserId WHERE ArkadasListesi.OnaylandiMi =

‘True’ And (ArkadasListesi.Kim = @UserId)

Union

SELECT aspnet_Users.UserName, Kim As KullaniciId

FROM ArkadasListesi INNER JOIN aspnet_Users

ON ArkadasListesi.Kim = aspnet_Users.UserId WHERE ArkadasListesi. OnaylandiMi =

‘True’ And (ArkadasListesi.Kimin = @UserId)

Liste 1.24: ArkadasListem StoredProcedure’ü.

Mesaj gönderileceği zaman mesajı gönderecek kişi, alacak mesajı göndereceği kişinin adını ya- zar. Veritabanı ise bir mesajı kaydedebilmesi için kullanıcının ID bilgisine ihtiyaç duyacaktır. Ve- ritabanı üzerinde kullanıcının adını parametre olarak alan ve ID’sini döndüren function’ı yazın. (Liste 1.25)

CREATE function KullaniciIdAl

(

@UserName nvarchar(50)

)

returns uniqueidentifier

As

begin

Declare @userId uniqueidentifier

Select @UserId =UserId From aspnet_Users Where [UserName] = @ username

return @userId

end

Liste 1.25: KullanıcıIdAl function tanımlaması.

From aspnet_Users Where [UserName] = @ username return @userId end Liste 1.25: KullanıcıIdAl function tanımlaması.

herkesburada.com

herkesburada.com 35 Yenimesaj.aspx sayfasına geri dönüp arkadaş listesini döndürecek metodu tanımlayın. public

35

Yenimesaj.aspx sayfasına geri dönüp arkadaş listesini döndürecek metodu tanımlayın.

public static List<string> uyeler = new List<string>();

[System.Web.Services.WebMethodAttribute(), System.Web.Script. Services.ScriptMethodAttribute()]

public static string[] GetCompletionList(string prefixText, int count, string contextKey)

{ SqlCommand cmd = new SqlCommand(“ArkadasListem”,con); cmd.CommandType = CommandType.StoredProcedure;
{
SqlCommand cmd = new SqlCommand(“ArkadasListem”,con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
uyeler.Clear();
foreach (DataRow dr in dt.Rows)
{
if (dr[“UserName”].ToString().StartsWith(prefixText))
uyeler.Add(dr[“UserName”].ToString());
}
return uyeler.ToArray();
}
{

SqlConnection con = new SqlConnection(ConfigurationManage r.ConnectionStrings[“LocalSqlServer”].ConnectionString);

cmd.Parameters.AddWithValue(“@UserId”, Membership. GetUser(HttpContext.Current.User.Identity.Name).ProviderUserKey);

Liste 1.26: Kullanıcının arkadaş listesini otomatik dolduran metod.

Arkadaş listesini doldurduktan sonra yeni mesaj göndermek için btnGonder button kontrolünün Click olayında yeni mesaj gönderme kodlarını yazın.

protected void btnGonder_Click(object sender, EventArgs e)

SqlConnection con = new SqlConnection(ConfigurationManage r.ConnectionStrings[“LocalSqlServer”].ConnectionString);

SqlCommand cmd = new SqlCommand(“Insert into mesajla r(Kimden,Kime,MesajIcerik,Baslik,Tarih) values(@Kimden,dbo. KullaniciIdAl(@Kime),@MesajIcerik,@Baslik,@Tarih)”, con);

cmd.Parameters.AddWithValue(“@Kimden”,Membership.

GetUser(User.Identity.Name).ProviderUserKey);

cmd.Parameters.AddWithValue(“@Kime”,txtKime.Text);

cmd.Parameters.AddWithValue(“@MesajIcerik”,txtMesaj.

Text);

cmd.Parameters.AddWithValue(“@Baslik”,txtBaslik.Text);

cmd.Parameters.AddWithValue(“@Tarih”,DateTime.Now );

Text); cmd.Parameters.AddWithValue(“@Baslik”,txtBaslik.Text); cmd.Parameters.AddWithValue(“@Tarih”,DateTime.Now );

36

36 Proje 1 int i = 0; try { con.Open(); i = cmd.ExecuteNonQuery(); } catch (SqlException

Proje 1

int i = 0;

try

{

con.Open();

i = cmd.ExecuteNonQuery();

}

catch (SqlException ex) { throw ex; } finally { con.Close(); } if (i == 1)
catch (SqlException ex)
{
throw ex;
}
finally
{
con.Close();
}
if (i == 1)
{
Response.Redirect(“~/kullanici/mesajgonderildi.
}
Şekil 1.20: YeniMesaj.aspx sayfa tasarım görünümü.

aspx”);

}

Liste 1.27: btnGonder button kontrolü Click olayı.

Mesaj gönderildikten sonra kullanıcıya mesajın gittiğine dair mesajı gönderilecek ve tekrar mesaj göndermek isteyip istemediğini sorulacak mesajgonderildi.aspx sayfasını Kullanici klasörüne ek- leyin ve master page seçtirmeyin.

<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”mesajgond erildi.aspx.cs” Inherits=”Kullanici_mesajgonderildi” %>

<!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”>

<html xmlns=”http://www.w3.org/1999/xhtml” > <head runat=”server”>

<title>Mesaj Gönderildi</title>

herkesburada.com

Gönderildi</title> herkesburada.com 37 <link href=”~/Style/Genel.css”

37

<link href=”~/Style/Genel.css” rel=”stylesheet” type=”text/ css” />

</head>

<body>

<form id=”form1” runat=”server”>

<div> <br /> <br /> </form> { Response.Redirect(“~/kullanici/yenimesaj.aspx”); }
<div>
<br />
<br />
</form>
{
Response.Redirect(“~/kullanici/yenimesaj.aspx”);
}
Şekil 1.21: MesajGonderildi.
aspx tasarım görünümü.

/Controls/KullaniciSolMenu.ascx”

<asp:Label ID=”Label1” runat=”server” Font-Size=”Medium”

ID=”Label1” runat=”server” Font-Size=”Medium” /> ForeColor=”Red” Text=”Mesajınız Gönderildi

/>

ForeColor=”Red” Text=”Mesajınız Gönderildi

”></asp:Label><br

<asp:LinkButton ID=”LinkButton1” runat=”server” OnClick=”lnkYeniMesaj_Click”>Yeni Mesaj</asp:LinkButton>

<asp:HyperLink ID=”HyperLink1” runat=”server” NavigateUrl=”javascript:window.close();”>Kapat</asp:HyperLink></ div>

</body>

</html>

Liste 1.28: Mesajgonderildi.aspx sayfası html tasarımı.

Yeni Mesaj button kontrolünün Click olayında yenimesaj.aspx sayfasına yönlendirme yapın.

protected void lnkYeniMesaj_Click(object sender, EventArgs e)

Liste 1.29: lnkYeniMesaj button kontrol Click olayı.

Bu aşamadan sonra eklenen tüm sayfaları herkesbu- rada.master sayfasından türetin ve default.aspx sayfa- sındaki şekilde sol ve sağ taraf olacak şekilde bölün.

sındaki şekilde sol ve sağ taraf olacak şekilde bölün. Mesaj gönderme ve gelen/giden mesajları görüntüleme

Mesaj gönderme ve gelen/giden mesajları görüntüleme tamamlandıktan sonra mesajoku.aspx sayfasını Kullanici klasörüne ekleyin.

<%@ Page Language=”C#” MasterPageFile=”~/herkesburada. master” AutoEventWireup=”true” CodeFile=”mesajoku.aspx.cs” Inherits=”Kullanici_mesajoku” Title=”Untitled Page” %>

<%@ Register Src=”

laniciSolMenu” TagPrefix=”uc1” %>

TagName=”Kul

<asp:Content ID=”Content1” ContentPlaceHolderID=”AnaIcerik” Runat=”Server”>

<div class=”SolMenu”>

ID=”Content1” ContentPlaceHolderID=”AnaIcerik” Runat=”Server”> <div class=”SolMenu”>

38

38 Proje 1 <uc1:KullaniciSolMenu ID=”KullaniciSolMenu1” runat=”server” /> </div> <div

Proje 1

<uc1:KullaniciSolMenu ID=”KullaniciSolMenu1” runat=”server”

/>

</div>

<div class=”KullaniciIcerik”>

<asp:Label ID=”lblGonderen” runat=”server” ForeColor=”Blue” Text=”Gönderen : “></asp:Label>

der ki; <br /> <br /> <br /> <br /> { if (!Page.IsPostBack) { MesajOku();
der ki;
<br />
<br />
<br />
<br />
{
if (!Page.IsPostBack)
{
MesajOku();
}
}
void MesajOku()
{
if (Request.QueryString[“mesaj”] != null)
{
try
{ if (Request.QueryString[“mesaj”] != null) { try <asp:Label ID=”lblBaslik” runat=”server”

<asp:Label ID=”lblBaslik” runat=”server” Font-Bold=”True” Text=”Selamlar”></asp:Label><br />

<asp:Label ID=”lblMesaj” runat=”server” Text=”Label”></asp:

Label>&nbsp;<br />

<asp:Button ID=”btnSil” runat=”server” OnClick=”btnSil_Click” Text=”Sil” />

<asp:Button ID=”btnYanitla” runat=”server” OnClick=”btnYanitla_Click” Text=”Yanıtla” /></div>

</asp:Content>

Liste 1.30: Mesajoku.aspx html tasarımı.

Mesajı okutmak için mesajoku.aspx sayfasının code bölümüne Liste 1.31‘deki kodları yazın.

protected void Page_Load(object sender, EventArgs e)

{

Guid g = new Guid(Request.QueryString[“mesaj”]);

SqlConnection con = new SqlConnection(Configurati onManager.ConnectionStrings[“LocalSqlServer”].ConnectionString);

SqlCommand cmd = new SqlCommand(“Select m.*, [UserName] From Mesajlar m Inner join aspnet_Users a on a.UserId = m.Kimden Where MesajId = @MesajId And Kime=@Kime”, con);

From Mesajlar m Inner join aspnet_Users a on a.UserId = m.Kimden Where MesajId = @MesajId And

herkesburada.com

herkesburada.com 39 cmd.Parameters.AddWithValue(“@MesajId”, g); cmd.Parameters.AddWithValue(“@Kime”, Membership.

39

cmd.Parameters.AddWithValue(“@MesajId”, g);

cmd.Parameters.AddWithValue(“@Kime”, Membership. GetUser(User.Identity.Name).ProviderUserKey);

try

{

con.Open(); if (rdr.Read()) { cmdGuncelle.ExecuteNonQuery(); } else { } } catch (SqlException ex) { throw
con.Open();
if (rdr.Read())
{
cmdGuncelle.ExecuteNonQuery();
}
else
{
}
}
catch (SqlException ex)
{
throw ex;
}
finally { con.Close(); }
}
catch (FormatException ex)
{

Response.Redirect(“mesajlarim.aspx”);

SqlDataReader rdr = cmd.ExecuteReader();

SqlDataReader rdr = cmd.ExecuteReader(); lblBaslik.Text = rdr[“Baslik”].ToString();

lblBaslik.Text = rdr[“Baslik”].ToString();

lblGonderen.Text = rdr[“UserName”].

ToString();

lblMesaj.Text = rdr[“MesajIcerik”].

ToString();

SqlCommand cmdGuncelle = new SqlCommand(“Update mesajlar Set OkunduMu=’True’ Where MesajId=@ MesajId”,con);

cmdGuncelle.Parameters.AddWithValue(“@ MesajId”, new Guid(Request.QueryString[“mesaj”]));

Response.Redirect(“~/kullanici/default.

aspx”);

}

}

}

Liste 1.31: MesajOku.aspx Page_Load olayı ve MesajOku metodu.

Response.Redirect(“~/kullanici/default. aspx”); } } } Liste 1.31: MesajOku.aspx Page_Load olayı ve MesajOku metodu.

40

40 Proje 1 Okunan mesajı cevaplamak ve silmek için btnSil ve btnCevapla button kontrol Click olaylarına

Proje 1

Okunan mesajı cevaplamak ve silmek için btnSil ve btnCevapla button kontrol Click olaylarına Liste 1.32‘deki kodu ekleyin.

protected void btnSil_Click(object sender, EventArgs e)

{

if (Request.QueryString[“mesaj”] != null)

{

try { } catch { return; } } int i = 0; try { con.Open();
try
{
}
catch { return; }
}
int i = 0;
try
{
con.Open();
i = cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
throw ex;
}
finally
{
con.Close();
}
}
ex) { throw ex; } finally { con.Close(); } } Guid g = new Guid(Request.QueryString[“mesaj”]);

Guid g = new Guid(Request.QueryString[“mesaj”]);

SqlConnection con = new SqlConnection(ConfigurationManage r.ConnectionStrings[“LocalSqlServer”].ConnectionString);

SqlCommand cmd = new SqlCommand(“Update mesajlar set AliciyaGosterme = ‘True’ Where MesajId = @MesajId”, con);

cmd.Parameters.AddWithValue(“@MesajId”, new Guid(Request. QueryString[“mesaj”]));

if (i > 0) Response.Redirect(“~/kullanici/mesajlarim.

aspx”);

protected void btnYanitla_Click(object sender, EventArgs e)

{

Session[“cevap”] = “Cvp :” + lblBaslik.Text + “|” + lblGonderen.Text; ;

Response.Redirect(“~/kullanici/cevapla.aspx”);

}

Liste 1.32: btnSil ve btnYanitla button kontrolü Click olayı.

; Response.Redirect(“~/kullanici/cevapla.aspx”); } Liste 1.32: btnSil ve btnYanitla button kontrolü Click olayı.

herkesburada.com

MesajOku.aspx tasarım görünümü Şekil 1.22‘de gösterilmiştir.

tasarım görünümü Şekil 1.22‘de gösterilmiştir. /Controls/KullaniciSolMenu.ascx” Şekil 1.22:
/Controls/KullaniciSolMenu.ascx”
/Controls/KullaniciSolMenu.ascx”

Şekil 1.22: MesajOku.aspx tasarım görünümü.

btnYanitla button kontrolüne tıklandığı zaman yönlendirilecek olan cevapla.aspx sayfasını Kulla- nici klasörüne ekleyin. Sayfayı eklerken masterpage seçtirmeyi unutmayın.

<%@ Page Language=”C#” MasterPageFile=”~/herkesburada. master” AutoEventWireup=”true” CodeFile=”cevapla.aspx.cs” Inherits=”Kullanici_cevapla” Title=”Untitled Page” %>

<%@ Register Assembly=”AjaxControlToolkit” Namespace=”AjaxControl Toolkit” TagPrefix=”cc1” %>

<%@ Register Src=”

TagName=”Kul

laniciSolMenu” TagPrefix=”uc1” %>

<asp:Content ID=”Content1” ContentPlaceHolderID=”AnaIcerik” Runat=”Server”>

<div class=”SolMenu”>

/>

<uc1:KullaniciSolMenu ID=”KullaniciSolMenu1” runat=”server”

</div>

<div class=”KullaniciIcerik”>

<div style=”text-align:left”>

<table style=”width: 423px”>

<tr>

<td style=”width: 55px”>

</td>

<td style=”width: 69px”>

</td>

<tr> <td style=”width: 55px”> </td> <td style=”width: 69px”> </td> 41
<tr> <td style=”width: 55px”> </td> <td style=”width: 69px”> </td> 41

41

42

42 Proje 1 <td style=”width: 69px”> </td> <td style=”width: 100px”> </td>

Proje 1

<td style=”width: 69px”>

</td>

<td style=”width: 100px”>

</td>

</tr>

<tr> <td style=”width: 55px”> Kime : </td> <td style=”width: 69px”>
<tr>
<td style=”width: 55px”>
Kime :
</td>
<td style=”width: 69px”>
<asp:TextBox ID=”txtKime” runat=”server”></
asp:TextBox></td>
<td style=”width: 69px”>
</td>
<td style=”width: 100px”>
</td>
</tr>
<tr>
<td style=”width: 55px”>
Konu :
</td>
<td colspan=”3”>
<asp:TextBox ID=”txtBaslik” runat=”server”
Width=”100%”></asp:TextBox></td>
</tr>
<tr>
<td style=”width: 55px; height: 18px”
valign=”top”>
Mesaj :
</td>
<td colspan=”3” style=”height: 18px”>
<asp:TextBox ID=”txtMesaj” runat=”server”
Height=”107px” TextMode=”MultiLine” Width=”100%”></asp:TextBox></
td>
</tr>
<tr>
<td style=”width: 55px”>
</td>
<td style=”width: 69px”>

<asp:Button ID=”btnGonder” runat=”server” Text=”Gönder” OnClick=”btnGonder_Click” />

</td>

<td style=”width: 69px”>

<asp:Button ID=”btnIptal” runat=”server” Text=”İptal” OnClick=”btnIptal_Click” /></td>

<asp:Button ID=”btnIptal” runat=”server” Text=”İptal” OnClick=”btnIptal_Click” /></td>

herkesburada.com

<td style=”width: 100px”>

</td>

</tr>

<tr>

<td style=”width: 55px; height: 18px”>

</td>

<td style=”height: 18px” colspan=”3”> </cc1:AutoCompleteExtender> </td> </tr>
<td style=”height: 18px” colspan=”3”>
</cc1:AutoCompleteExtender>
</td>
</tr>
</table>
</div>
{
if (!Page.IsPostBack)
{
if (Session[“cevap”] != null)
{
}
}

&nbsp;<cc1:AutoCompleteExtender ID=”AutoCompl eteExtender1” runat=”server” ServiceMethod=”GetCompletionList”

runat=”server” ServiceMethod=”GetCompletionList” UseContextKey=”True” TargetControlID=”txt Kime”>

UseContextKey=”True” TargetControlID=”txt

Kime”>

</div>

</asp:Content>

Liste 1.33: Cevapla.aspx sayfası html tasarımı.

Bu sayfada mesaj gönderilecek kişi kullanıcının arkadaşıysa, mesaj gönderilecek kişinin adı oto- matik tamamlanacaktır. Cevapla.aspx.cs dosyasına Liste 1.34’de belirtilen metodu aynen yazın.

Sayfa ilk yüklendiğinde mesaja cevap yazılacağı için session’dan gelen konu bilgisini ilgili textbox kontrolüne yazdırın ve btnGonder butonuna tıklandığı zaman mesajı gönderme kodunu yazın.

protected void Page_Load(object sender, EventArgs e)

txtBaslik.Text = Session[“cevap”].ToString().

Split(‘|’)[0];

txtKime.Text = Session[“cevap”].ToString().

Split(‘|’)[1];

= Session[“cevap”].ToString(). Split(‘|’)[1]; 43 } protected void btnGonder_Click(object sender, EventArgs

43

}

protected void btnGonder_Click(object sender, EventArgs e)

{

SqlConnection con = new SqlConnection(ConfigurationManage r.ConnectionStrings[“LocalSqlServer”].ConnectionString);

{ SqlConnection con = new SqlConnection(ConfigurationManage r.ConnectionStrings[“LocalSqlServer”].ConnectionString);

 Proje 1 SqlCommand cmd = new SqlCommand(“Insert into mesajla r(Kimden,Kime,MesajIcerik,Baslik,Tarih)

Proje 1

SqlCommand cmd = new SqlCommand(“Insert into mesajla r(Kimden,Kime,MesajIcerik,Baslik,Tarih) values(@Kimden,dbo. KullaniciIdAl(@Kime),@MesajIcerik,@Baslik,@Tarih)”, con);

cmd.Parameters.AddWithValue(“@Kimden”, Membership. GetUser(User.Identity.Name).ProviderUserKey);

cmd.Parameters.AddWithValue(“@Kime”, txtKime.Text);

cmd.Parameters.AddWithValue(“@MesajIcerik”, txtMesaj. cmd.Parameters.AddWithValue(“@Tarih”, DateTime.Now); int i
cmd.Parameters.AddWithValue(“@MesajIcerik”, txtMesaj.
cmd.Parameters.AddWithValue(“@Tarih”, DateTime.Now);
int i = 0;
try
{
con.Open();
i = cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
throw ex;
}
finally
{
con.Close();
}
if (i == 1)
{
Response.Redirect(“~/kullanici/mesajlarim.aspx”);
}
}
protected void btnIptal_Click(object sender, EventArgs e)
{
Response.Redirect(“~/kullanici/mesajlarim.aspx”);
}

Text);

cmd.Parameters.AddWithValue(“@Baslik”, txtBaslik.Text);

Liste 1.34: Cevapla.aspx sayfası Page_Load ve btnGonder button Click olayları.

Cevapla.aspx sayfası tasarım görünümü Şekil 1.23’de gösterilmiştir.

ve btnGonder button Click olayları. Cevapla.aspx sayfası tasarım görünümü Şekil 1.23’de gösterilmiştir.

herkesburada.com

herkesburada.com Şekil 1.23: Cevapla.aspx sayfa tasarım görünümü. Bu aşamaya kadar yapılanları test etmek için
herkesburada.com Şekil 1.23: Cevapla.aspx sayfa tasarım görünümü. Bu aşamaya kadar yapılanları test etmek için

Şekil 1.23: Cevapla.aspx sayfa tasarım görünümü.

Bu aşamaya kadar yapılanları test etmek için uygulamayı çalıştırın ve kayıt olun. Kendi kendinize yeni bir mesaj gönderin. Gönderdiğiniz mesaj gelen mesajlarda ve giden mesajlarda görünüyor ise, gelen mesajlardaki görünüm okunmamış mesaj olarak görünüyor ve mesaj okuduktan sonra okundu olarak işaretleniyorsa şu ana kadar yapılanlar çalışıyor demektir. Aksi bir durum var ise yazdığınız kodları test edin.

Kullanıcıların kişisel bilgilerini ve profil bilgilerini girebilecekleri bilgiler.aspx sayfasını Kullanici kla- sörüne ekleyin. Bu sayfadaki bazı bilgiler veritabanından, diğer bilgiler ise web.config dosyasında tanımlanan profile üzerinden alınacaktır.

dosyasında tanımlanan profile üzerinden alınacaktır. Şekil 1.24: Bilgiler.aspx sayfa tasarım görünümü.

Şekil 1.24: Bilgiler.aspx sayfa tasarım görünümü.

dosyasında tanımlanan profile üzerinden alınacaktır. Şekil 1.24: Bilgiler.aspx sayfa tasarım görünümü.
dosyasında tanımlanan profile üzerinden alınacaktır. Şekil 1.24: Bilgiler.aspx sayfa tasarım görünümü.

 Proje 1 Bilgiler.aspx sayfası üzerindeki Şehir, Eğitm Durumu, Meslek ve Tuttuğu Takım bilgisi veritaba- nından

Proje 1

Bilgiler.aspx sayfası üzerindeki Şehir, Eğitm Durumu, Meslek ve Tuttuğu Takım bilgisi veritaba- nından alınıyor. Diğer bilgiler ise profile’dan alınıyor.

<%@ Page Language=”C#” MasterPageFile=”~/herkesburada. master” AutoEventWireup=”true” CodeFile=”bilgiler.aspx.cs” Inherits=”Kullanici_bilgiler” Title=”Untitled Page” %>

Namespace=”System.Web.UI” TagPrefix=”asp” %> /Controls/KullaniciSolMenu.ascx” <tr> <td
Namespace=”System.Web.UI” TagPrefix=”asp” %>
/Controls/KullaniciSolMenu.ascx”
<tr>
<td style=”width: 280px”>
</td>
<td style=”width: 530px”>
</td>
<td style=”width: 494px”>
</td>
</tr>
<tr>
<td style=”width: 280px; height: 26px;”>
Ad :</td>
<td style=”width: 530px; height: 26px;”>
<asp:TextBox ID=”txtAd” runat=”server”
<td style=”width: 494px; height: 26px;”>
</td>
</tr>
<tr>
<td style=”width: 280px; height: 26px;”>

<%@ Register Assembly=”System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”

Culture=neutral, PublicKeyToken=31bf3856ad364e35” <%@ Register Src=” TagName=”Kul laniciSolMenu”

<%@ Register Src=”

TagName=”Kul

laniciSolMenu” TagPrefix=”uc1” %>

<asp:Content ID=”Content1” ContentPlaceHolderID=”AnaIcerik” Runat=”Server”>

<div class=”SolMenu”>

/>

<uc1:KullaniciSolMenu ID=”KullaniciSolMenu1” runat=”server”

</div>

<div class=”KullaniciIcerik”>

<table style=”width: 100%”>

Width=”100%”></asp:TextBox></td>

Soyad :</td>

<td style=”width: 530px; height: 26px;”>

<asp:TextBox ID=”txtSoyad” runat=”server”

Width=”100%”></asp:TextBox></td>

<td style=”width: 494px; height: 26px;”>

</td>

<td style=”width: 494px; height: 26px;”> </td>

herkesburada.com

</tr>

<tr>

<td style=”width: 280px”>

Doğum Tarihi :</td>

<td style=”width: 530px”>

<asp:TextBox ID=”txtDogumTarihi” runat=”server”

<td style=”width: 494px”> </td> </tr> <tr> <td style=”width: 280px; height:
<td style=”width: 494px”>
</td>
</tr>
<tr>
<td style=”width: 280px; height: 24px;”>
Cinsiyet</td>
<td style=”width: 530px; height: 24px”>
</asp:DropDownList></td>
<td style=”width: 494px; height: 24px;”>
</td>
</tr>
<tr>
<td style=”width: 280px; height: 1px;”>
Yaşadınız Şehir :
</td>
<td style=”width: 530px; height: 1px;”>
</asp:DropDownList></td>
<td style=”width: 494px; height: 1px;”>
</td>
</tr>
<tr>
<td style=”width: 280px”>
Eğitim Durumu :
</td>
<td style=”width: 530px”>

Width=”100%”></asp:TextBox></td>

Width=”100%”></asp:TextBox></td> <asp:DropDownList ID=”drpCinsiyet”

<asp:DropDownList ID=”drpCinsiyet” runat=”server”>

<asp:ListItem Value=”True”>Bay</asp:ListItem>

<asp:ListItem Value=”False”>Bayan</asp:

ListItem>

<asp:DropDownList ID=”drpYasadiginizSehir” runat=”server” DataSourceID=”SqlDataSource1” DataTextField=”SehirAdi” DataValueField=”SehirId”>

DataValueField=”SehirId”>  <asp:DropDownList ID=”drpEgitimDurumu”

<asp:DropDownList ID=”drpEgitimDurumu” runat=”server” DataSourceID=”SqlDataSource2” DataTextField=”Egiti mDurumAdi” DataValueField=”EgitimDurumId”>

mDurumAdi” DataValueField=”EgitimDurumId”> </asp:DropDownList></td> <td

</asp:DropDownList></td>

<td style=”width: 494px”>

</td>

 Proje 1 </tr> <tr> <td style=”width: 280px; height: 24px”> Meslek : </td> <td

Proje 1

</tr>

<tr>

<td style=”width: 280px; height: 24px”>

Meslek :

</td>

<td style=”width: 530px; height: 24px”> <asp:DropDownList ID=”drpMeslek” runat=”server”
<td style=”width: 530px; height: 24px”>
<asp:DropDownList ID=”drpMeslek” runat=”server”
DataSourceID=”SqlDataSource3” DataTextField=”MeslekAdi” DataValue
Field=”MeslekId”>
</asp:DropDownList></td>
<td style=”width: 494px; height: 24px”>
</td>
</tr>
<tr>
<td style=”width: 280px”>
Fobileriniz :
</td>
<td style=”width: 530px”>
<asp:TextBox ID=”txtFobi” runat=”server”
TextMode=”MultiLine” Width=”100%”></asp:TextBox></td>
<td style=”width: 494px”>
</td>
</tr>
<tr>
<td style=”width: 280px”>
Hobileriniz :
</td>
<td style=”width: 530px”>
<asp:TextBox ID=”txtHobi” runat=”server”
TextMode=”MultiLine” Width=”100%”></asp:TextBox></td>
<td style=”width: 494px”>
</td>
</tr>
<tr>
<td style=”width: 280px; height: 40px;”>
Kendinizi Anlatın :
</td>
<td style=”width: 530px; height: 40px;”>
<asp:TextBox ID=”txtHakkinda” runat=”server”
TextMode=”MultiLine” Width=”100%”></asp:TextBox></td>

<td style=”width: 494px; height: 40px;”>

</td>

</tr>

<tr>

<td style=”width: 280px”>

494px; height: 40px;”> </td> </tr> <tr> <td style=”width: 280px”>

Okuduğunuz Kitaplar :</td>

<td style=”width: 530px”>

herkesburada.com

<td style=”width: 530px”> herkesburada.com  <asp:TextBox ID=”txtOkuduguKitaplar”

<asp:TextBox ID=”txtOkuduguKitaplar” runat=”server” TextMode=”MultiLine” Width=”100%”></asp:TextBox></ td>

<td style=”width: 494px”>

</td> </tr> <tr> <td style=”width: 280px”> Tuttuğunuz Takım : </td>
</td>
</tr>
<tr>
<td style=”width: 280px”>
Tuttuğunuz Takım :
</td>
<td style=”width: 530px”>
</asp:DropDownList></td>
<td style=”width: 494px”>
</td>
</tr>
<tr>
<td style=”width: 280px; height: 40px;”>
Yaptığınız Sporlar</td>
<td style=”width: 530px; height: 40px;”>
<td style=”width: 494px; height: 40px;”>
</td>
</tr>
<tr>
<td style=”width: 280px”>
Sigara kullanırmısınız ? :</td>
<td style=”width: 530px”>
</asp:DropDownList></td>
<td style=”width: 494px”>
<td style=”width: 494px”> <asp:DropDownList ID=”drpTakim” runat=”server”

<asp:DropDownList ID=”drpTakim” runat=”server” DataSourceID=”SqlDataSource4” DataTextField=”TakimAdi” DataValueF ield=”TakimId”>

<asp:TextBox ID=”txtYaptigiSporlar” runat=”server” TextMode=”MultiLine” Width=”100%”></asp:TextBox></td>

<asp:DropDownList ID=”drpSigara” runat=”server”>

<asp:ListItem Value=”True”>Evet</asp:ListItem>

<asp:ListItem Value=”False”>Hayır</asp:

ListItem>

</td>

</tr>

<tr>

<td style=”width: 280px”>

Alkol kullanırmısınız ?&nbsp; :</td>

style=”width: 280px”> Alkol kullanırmısınız ?&nbsp; :</td> <td style=”width: 530px”>

<td style=”width: 530px”>

50

50 Proje 1 <asp:DropDownList ID=”drpAlkol” runat=”server”> <asp:ListItem

Proje 1

<asp:DropDownList ID=”drpAlkol” runat=”server”>

<asp:ListItem Value=”True”>Evet</asp:ListItem>

<asp:ListItem Value=”False”>Hayır</asp:

ListItem>

</asp:DropDownList></td>

<td style=”width: 494px”> </td> </tr> <tr> <td style=”width: 280px”>
<td style=”width: 494px”>
</td>
</tr>
<tr>
<td style=”width: 280px”>
Profilimi Arkadaşlarım Görsün</td>
<td style=”width: 530px”><asp:DropDownList
ID=”drpYetki” runat=”server”>
<asp:ListItem Value=”True”>Evet</asp:ListItem>
<asp:ListItem Value=”False”>Hayır</asp:ListItem>
</asp:DropDownList></td>
<td style=”width: 494px”>
</td>
</tr>
<tr>
<td style=”width: 280px” valign=”top”>
</td>
<td style=”width: 530px”>
&nbsp;</td>
<td style=”width: 494px” valign=”top”>
</td>
</tr>
<tr>
<td style=”width: 280px”>
</td>
<td style=”width: 530px”>
<asp:Button ID=”btGuncelle” runat=”server”
OnClick=”btGuncelle_Click” Text=”Güncelle” /></td>
<td style=”width: 494px”>
</td>
</tr>
<tr>
<td style=”width: 280px”>
</td>

<td style=”width: 530px”>

</td>

<td style=”width: 494px”>

</td>

</tr>

</table>

530px”> </td> <td style=”width: 494px”> </td> </tr> </table>

herkesburada.com

herkesburada.com 51 <asp:SqlDataSource ID=”SqlDataSource1” runat=”server” ConnectionString=”<%$

51

<asp:SqlDataSource ID=”SqlDataSource1” runat=”server” ConnectionString=”<%$ ConnectionStrings:ConStrHerkesBurada %>”

SelectCommand=”SELECT [SehirId], [SehirAdi] FROM [Sehirler]”></asp:SqlDataSource>

<asp:SqlDataSource ID=”SqlDataSource2” runat=”server” ConnectionString=”<%$ ConnectionStrings:ConStrHerkesBurada %>”

SelectCommand=”SELECT [EgitimDurumId], [EgitimDurumAdi] FROM [EgitimDurumlari]”>

</asp:SqlDataSource> { if (!Page.IsPostBack) { BilgileriGoster(); } } void BilgileriGoster() { txtAd.Text
</asp:SqlDataSource>
{
if (!Page.IsPostBack)
{
BilgileriGoster();
}
}
void BilgileriGoster()
{
txtAd.Text = Profile.KisiselBilgiler.Ad;
txtSoyad.Text = Profile.KisiselBilgiler.Soyad;
txtSoyad.Text = Profile.KisiselBilgiler.Soyad; <asp:SqlDataSource ID=”SqlDataSource3”

<asp:SqlDataSource ID=”SqlDataSource3” runat=”server” ConnectionString=”<%$ ConnectionStrings:ConStrHerkesBurada %>”

SelectCommand=”SELECT [MeslekId], [MeslekAdi] FROM [Meslekler]”></asp:SqlDataSource>

<asp:SqlDataSource ID=”SqlDataSource4” runat=”server” ConnectionString=”<%$ ConnectionStrings:ConStrHerkesBurada %>”

SelectCommand=”SELECT [TakimId], [TakimAdi] FROM [Takimlar] ORDER BY [TakimAdi]”></asp:SqlDataSource>

</div>

</asp:Content>

Liste 1.35: Bilgiler.aspx sayfası html görünümü.

Sayfa ilk yüklendiğinde profil bilgilerinin görüntülenmesini, guncelle butonuna tıklandığı zaman profil bilgilerinin güncelleneceği Liste 1.36‘daki kodu Liste.aspx.cs dosyasına yazın.

protected void Page_Load(object sender, EventArgs e)

txtDogumTarihi.Text = Profile.KisiselBilgiler.DogumTarihi. ToShortDateString();

drpCinsiyet.SelectedValue = Profile.KisiselBilgiler. Cinsiyet.ToString();

// Eğitim Durumu

if (!string.IsNullOrEmpty(Profile.EgitimDurumId))

{

drpEgitimDurumu.SelectedValue = Profile.EgitimDurumId;

Durumu if (!string.IsNullOrEmpty(Profile.EgitimDurumId)) { drpEgitimDurumu.SelectedValue = Profile.EgitimDurumId; }

}

52

52 Proje 1 // Takimlar if (!string.IsNullOrEmpty(Profile.TuttuguTakimId)) { drpTakim.SelectedValue =

Proje 1

// Takimlar

if (!string.IsNullOrEmpty(Profile.TuttuguTakimId))

{

drpTakim.SelectedValue = Profile.TuttuguTakimId;

} // Şehir if (!string.IsNullOrEmpty(Profile.KisiselBilgiler. YasadigiSehirId)) { drpYasadiginizSehir.SelectedValue
}
// Şehir
if (!string.IsNullOrEmpty(Profile.KisiselBilgiler.
YasadigiSehirId))
{
drpYasadiginizSehir.SelectedValue = Profile.
KisiselBilgiler.YasadigiSehirId;
}
// Meslek
if (!string.IsNullOrEmpty(Profile.MeslekId))
{
drpMeslek.SelectedValue = Profile.MeslekId;
}
txtYaptigiSporlar.Text = Profile.YaptigiSporlar;
txtFobi.Text = Profile.Fobileri;
txtHobi.Text = Profile.Hobileri;
txtOkuduguKitaplar.Text = Profile.OkuduguKitaplar;
txtHakkinda.Text = Profile.Hakkinda;
drpAlkol.SelectedValue = Profile.AlkolKullanirMi.
ToString();
drpSigara.SelectedValue = Profile.SigaraKullanirMi.
ToString();
drpYetki.SelectedValue = Profile.ProfilYetki.ToString();
}
protected void btGuncelle_Click(object sender, EventArgs e)
{

Profile.KisiselBilgiler.Ad = txtAd.Text;

Profile.AlkolKullanirMi = Convert.ToBoolean(drpAlkol. SelectedValue);

Profile.SigaraKullanirMi = Convert.ToBoolean(drpSigara. SelectedValue);

Profile.Fobileri = txtFobi.Text;

SelectedValue); Profile.SigaraKullanirMi = Convert.ToBoolean(drpSigara. SelectedValue); Profile.Fobileri = txtFobi.Text;

herkesburada.com

herkesburada.com 53 Profile.Hobileri = txtHobi.Text; Profile.OkuduguKitaplar = txtOkuduguKitaplar.Text; Profile.Hakkinda =

53

Profile.Hobileri = txtHobi.Text;

Profile.OkuduguKitaplar = txtOkuduguKitaplar.Text;

Profile.Hakkinda = txtHakkinda.Text;

Profile.KisiselBilgiler.Soyad = txtSoyad.Text;

Profile.KisiselBilgiler.DogumTarihi = Convert.ToDateTime( txtDogumTarihi.Text);

Profile.YaptigiSporlar = txtYaptigiSporlar.Text; Profile.MeslekId = drpMeslek.SelectedValue; Profile.TuttuguTakimId =
Profile.YaptigiSporlar = txtYaptigiSporlar.Text;
Profile.MeslekId = drpMeslek.SelectedValue;
Profile.TuttuguTakimId = drpTakim.SelectedValue;
}
/Controls/KullaniciSolMenu.ascx”
<br />

Profile.KisiselBilgiler.Cinsiyet = Convert. ToBoolean(drpCinsiyet.SelectedValue);

= Convert. ToBoolean(drpCinsiyet.SelectedValue); Profile.KisiselBilgiler.YasadigiSehirId =

Profile.KisiselBilgiler.YasadigiSehirId = drpYasadiginizSehir.SelectedValue;

Profile.EgitimDurumId = drpEgitimDurumu.SelectedValue;

Profile.ProfilYetki = Convert.ToBoolean(drpYetki. SelectedValue);

Liste 1.36: Bilgiler.aspx sayfası kod görünümü.

Kendi kullanıcı bilgilerinizi girip bilgiler.aspx sayfasının durumunu test edin. Profil bilgilerinde kul- lanıcının kendi resmini güncellemesini ve değiştirmesini sağlamak için Kullanici klasörü içerisine profilresmi.aspx sayfası ekleyin. Default.aspx‘te yapıldığı gibi sayfayı div’lere bölün. KullaniciSol- Menu.ascx User Control içerisindeki Image kontrolüne link verilmişti. Bu link’e tıklandığı zaman eklenen sayfaya yönlendirilecektir. ProfilResmi.aspx sayfasına gerekli Label ve FileUpload kon- trolünü ekleyin.

<%@ Page Language=”C#” MasterPageFile=”~/herkesburada. master” AutoEventWireup=”true” CodeFile=”profilresmi.aspx.cs” Inherits=”Kullanici_profilresmi” Title=”Untitled Page” %>

<%@ Register Src=”

TagName=”Kul

laniciSolMenu” TagPrefix=”uc1” %>

<asp:Content ID=”Content1” ContentPlaceHolderID=”AnaIcerik” Runat=”Server”>

<div class=”SolMenu”>

/>

<uc1:KullaniciSolMenu ID=”KullaniciSolMenu1” runat=”server”

</div>

<div class=”KullaniciIcerik”>

<table style=”width: 100%”>

<tr>

<td rowspan=”5” style=”width: 100px”>

<center><asp:Image ID=”imgUser” runat=”server” AlternateText=”Profil resminiz” /></center></td>

AlternateText=”Profil resminiz” /></center></td> <td style=”width: 100px”>

<td style=”width: 100px”>

 Proje 1 </td> <td style=”width: 100px”> </td> <td style=”width: 100px”>

Proje 1

</td>

<td style=”width: 100px”>

</td>

<td style=”width: 100px”>

</td>

</tr> <tr> <td colspan=”3”> Yeni Resim Seç</td> </tr> <tr>
</tr>
<tr>
<td colspan=”3”>
Yeni Resim Seç</td>
</tr>
<tr>
<td style=”width: 100px”>
</td>
<td style=”width: 100px”>
</td>
<td style=”width: 100px”>
</td>
</tr>
<tr>
<td colspan=”2”>
<asp:FileUpload ID=”FileUpload1” runat=”server”
Width=”345px” /></td>
<td style=”width: 100px”>
</td>
</tr>
<tr>
<td style=”width: 100px”>
</td>
<td style=”width: 100px”>
</td>
<td style=”width: 100px”>
</td>
</tr>
<tr>
<td style=”width: 100px”>
</td>
<td style=”width: 100px”>
<asp:Button ID=”btnGuncelle” runat=”server”
OnClick=”btnGuncelle_Click” Text=”Güncelle” /></td>

<td style=”width: 100px”>

</td>

<td style=”width: 100px”>

</td>

</tr>

<tr>

style=”width: 100px”> </td> <td style=”width: 100px”> </td> </tr> <tr>

<td style=”width: 100px”> </td> <td style=”width: 100px”> </td> <td style=”width: 100px”> </td> <td style=”width: 100px”> </td> </tr> <tr>

<td style=”width: 100px”> </td> <td style=”width: 100px”> </td> <td
<td style=”width: 100px”>
</td>
<td style=”width: 100px”>
</td>
<td style=”width: 100px”>
</td>
<td style=”width: 100px”>
</td>
</tr>
<tr>

<td style=”width: 100px”> </td> <td style=”width: 100px”> </td> <td style=”width: 100px”> </td> <td style=”width: 100px”> </td> </tr> </table>

100px”> </td> </tr> </table> </div> </asp:Content> Liste 1.37:

</div>

</asp:Content>

Liste 1.37: ProfilResmi.aspx html tasarımı.

Gerekli html tasarımı yapıldıktan sonra Şekil 1.25‘deki görüntüyü elde edeceksiniz.

Gerekli html tasarımı yapıldıktan sonra Şekil 1.25‘deki görüntüyü elde edeceksiniz. herkesburada.com

herkesburada.com

Gerekli html tasarımı yapıldıktan sonra Şekil 1.25‘deki görüntüyü elde edeceksiniz. herkesburada.com

 Proje 1 { string resimAdi = Guid.NewGuid().ToString(); try { Profile.ProfilResmi = resimAdi + “.uyeResim”;

Proje 1

 Proje 1 { string resimAdi = Guid.NewGuid().ToString(); try { Profile.ProfilResmi = resimAdi + “.uyeResim”;
{ string resimAdi = Guid.NewGuid().ToString(); try { Profile.ProfilResmi = resimAdi + “.uyeResim”;
{
string resimAdi = Guid.NewGuid().ToString();
try
{
Profile.ProfilResmi = resimAdi + “.uyeResim”;
Response.Redirect(“profilresmi.aspx”);
}
catch (HttpException ex)
{

Şekil 1.25: ProfilResmi.aspx sayfa tasarım görünümü.

Kullanıcılardan gelecek resimler farklı formatlarda olabilir. Örneğin bir kullanıcı kendi resmini *.gif uzantısı ile gönderirken, diğer kullanıcı *.jpg olarak gönderebilir. Bu sorun için elinizde 2 alternatif vardır. Bunlardan ilki kullanıcının gönderdiği dosyanın uzantısını alıp dosyayı uzantısı ile kay- detmek, diğeri ise sabit bir uzantı ismi vermektir. Bu uygulama içerisinde kullanıcı resimleri için *.uyeresim olarak bir uzantı kullanılır. Herhangi bir resim formatında olduğu sürece sabit bir for- mat sorun çıkarmayacaktır. Bunun haricinde karşılaşılacak olduğunuz sorun ise resimlerin isimle- ridir. Kullanıcıların göndereceği resimlerin isimlerini çakışmayacak şekilde yeniden adlandırmanız gereklidir, bunun da en iyi yolu GUID kullanmaktır. btnGuncelle button kontrol Click olayına Liste 1.38‘deki kodu yazın.

protected void btnGuncelle_Click(object sender, EventArgs e)

FileUpload1.SaveAs(Server.MapPath(“~/UyeResimleri/”)

+ resimAdi + “.uyeResim”);

throw ex;

}

}

Liste 1.38: btnGuncelle button Click olayı.

+ resimAdi + “.uyeResim”); throw ex; } } Liste 1.38: btnGuncelle button Click olayı.

herkesburada.com

herkesburada.com  Form ilk yüklendiğinde mevcut resmi gösterebilmek için ProfilResmi.aspx sayfasının Load olayın-

Form ilk yüklendiğinde mevcut resmi gösterebilmek için ProfilResmi.aspx sayfasının Load olayın- da mevcut resmi gösterin.

protected void Page_Load(object sender, EventArgs e)

{

imgUser.ImageUrl = Server.MapPath(“~/UyeResimleri/”) + Profile.ProfilResmi;

} /Controls/KullaniciSolMenu.ascx” <br /> <br /> <asp:UpdatePanel ID=”UpdatePanel1”
}
/Controls/KullaniciSolMenu.ascx”
<br />
<br />
<asp:UpdatePanel ID=”UpdatePanel1” runat=”server”>
<ContentTemplate>
runat=”server”> <ContentTemplate> Liste 1.39: ProfilResmi.aspx Page Load olayı.

Liste 1.39: ProfilResmi.aspx Page Load olayı.

Arkadaşların profil bilgilerinin ve albümlerinin görüleceği ve mesaj göndermeyi sağlayacak olan arkadaslarim.aspx sayfasını Kullanici klasörüne ekleyin ve Default.aspx sayfasındaki gibi 2 par- çaya bölün. Müşterinin istediğine göre arkadaş olabilmek için bir kişi diğerine arkadaşlık teklif edecek yani kontaklarına eklemek için izin istemiş olacak. Teklif etme işlemi ilerleyen bölümlerde yapılacak. İlk önce kullanıcıya kendine gelen teklifleri gösterecek olarak kontroller eklenecek. Daha sonra kullanıcı listesini gösterecek olan DataList kontrolü eklenecek. Bu kontrol ile arkadaş- lara mesaj gönderimi, Profil görüntüleme ve Album görüntüleme yapılabilecek.

<%@ Page Language=”C#” MasterPageFile=”~/herkesburada. master” AutoEventWireup=”true” CodeFile=”arkadaslarim.aspx.cs” Inherits=”Kullanici_arkadaslarim” Title=”Arkadaşlarım” %>

<%@ Register Src=”

laniciSolMenu” TagPrefix=”uc1” %>

TagName=”Kul

<asp:Content ID=”Content1” ContentPlaceHolderID=”AnaIcerik” Runat=”Server”>

<div class=”SolMenu”>

<uc1:KullaniciSolMenu ID=”KullaniciSolMenu1” runat=”server”

/>

</div>

<div class=”KullaniciIcerik”>

&nbsp;<asp:LinkButton ID=”LinkButton2” runat=”server” ForeColor=”Blue” OnClick=”LinkButton2_Click”>Gelen Teklifler</ asp:LinkButton>

<asp:LinkButton ID=”lnkTeklifSayisi” runat=”server” ForeColor=”Red” OnClick=”lnkTeklifSayisi_Click”></asp:

LinkButton><br />

<asp:DataList id=”dtArkadaslar” runat=”server” ForeColor=”#333333” OnItemCommand=”dtArkadaslar_ItemCommand” Width=”632px” DataSource ID=”SqlDataSource1” CellPadding=”4”>

<FooterStyle BackColor=”#5D7B9D” Font-Bold=”True” ForeColor=”White”></FooterStyle>

<FooterStyle BackColor=”#5D7B9D” Font-Bold=”True” ForeColor=”White”></FooterStyle>

 Proje 1 <AlternatingItemStyle BackColor=”White” ForeColor=”#284775”></ AlternatingItemStyle>

Proje 1

<AlternatingItemStyle BackColor=”White” ForeColor=”#284775”></ AlternatingItemStyle>

<ItemStyle BackColor=”#F7F6F3” ForeColor=”#333333”></ItemStyle>

<SelectedItemStyle BackColor=”#E2DED6” Font-Bold=”True”

ForeColor=”#333333”></SelectedItemStyle>

<HeaderStyle BackColor=”#5D7B9D” Font-Bold=”True” ForeColor=”White”></HeaderStyle>

<ItemTemplate>

<table style=”width: 100%”> <tr> <td rowspan=”2” style=”width: 100px”>
<table style=”width: 100%”>
<tr>
<td rowspan=”2” style=”width: 100px”>
</td>
<td style=”width: 100px”>
</td>
<td rowspan=”3” style=”width: 100px”
<asp:LinkButton ID=”LinkButton1”
100px” <asp:LinkButton ID=”LinkButton1” <img src=’<%# ResimAdres(DataBinder.

<img src=’<%# ResimAdres(DataBinder. Eval(Container.DataItem, “UserName”).ToString()) %>’ alt=’<%# Eval(“UserName”).ToString() %> resmi’ />

valign=”top”>

<asp:LinkButton ID=”LinkButton3” runat=”server” ForeColor=”Blue” CommandName=”MesajGonder” CommandArgument=’<%# Eval(“UserName”) %>’>Mesaj Gönder</asp:

LinkButton><br />

<asp:LinkButton ID=”LinkButton4” runat=”server” ForeColor=”Blue” CommandName=”Sil” CommandArgument=’<%# Eval(“KullaniciId”) %>’ OnClientClick=”return confirm(‘Arkadaşını silmekten emin misiniz ?’)”>Sil</asp:

LinkButton><br />

runat=”server”

CommandName=”AlbumGoruntule” ForeColor=”Blue” CommandArgument=’<%# DataBinder.Eval(Container. DataItem, “UserName”)%>’>Album Görüntüle</asp:LinkButton><br />

<asp:LinkButton ID=”LinkButton5” runat=”server” CommandArgument=’<%# DataBinder.Eval(Container. DataItem, “UserName”) %>’

CommandName=”ProfilGoruntule” ForeColor=”Blue”>Profil Görüntüle</asp:LinkButton></td>

</tr>

<tr>

<td style=”width: 100px”>

</td>

</tr> <tr> <td style=”width: 100px”> </td>

</tr>

<tr>

herkesburada.com

</tr> <tr> herkesburada.com  <td style=”width: 100px”> &nbsp;<asp:Label

<td style=”width: 100px”>

&nbsp;<asp:Label ID=”UserNameLabel” runat=”server” Text=’<%# Eval(“UserName”) %>’></asp:Label></td>

<td style=”width: 100px”>

</td> </tr> </table> <br /> <br /> <SelectParameters>
</td>
</tr>
</table>
<br />
<br />
<SelectParameters>
</SelectParameters>

</asp:SqlDataSource>

</SelectParameters> </asp:SqlDataSource> </ItemTemplate>

</ItemTemplate>

</asp:DataList><asp:SqlDataSource id=”SqlDataSource1” runat=”server” SelectCommandType=”StoredProcedure” SelectComm and=”ArkadasListem” ConnectionString=”<%$ ConnectionStrings:

ConStrHerkesBurada %>”>

<asp:SessionParameter Name=”UserId” SessionField=”UserId” />

</ContentTemplate>

</asp:UpdatePanel>

</div>

</asp:Content>

Liste 1.40: Arkadaslarim.aspx html tasarım görüntüsü.

Sayfanın görsel çıktısı Şekil 1.26’da verilmiştir.

Sayfanın görsel çıktısı Şekil 1.26’da verilmiştir. Şekil 1.26: Arkadaslarim.aspx sayfa çıktısı.

Şekil 1.26: Arkadaslarim.aspx sayfa çıktısı.

Sayfanın görsel çıktısı Şekil 1.26’da verilmiştir. Şekil 1.26: Arkadaslarim.aspx sayfa çıktısı.

60

60 Proje 1 Arkadaslarim.aspx sayfası ilk yüklendiği zaman sayfa üzerinde kullanıcıya gelen cevaplanmamış teklif

Proje 1

Arkadaslarim.aspx sayfası ilk yüklendiği zaman sayfa üzerinde kullanıcıya gelen cevaplanmamış teklif sayılarını göstermek için TeklifSayisi() metodunu yazın ve ekrana teklif sayısını yaz- dırın.

protected void Page_Load(object sender, EventArgs e)

{

if (!Page.IsPostBack) { TeklifSayisi(); } } void TeklifSayisi() { try { con.Open(); int i =
if (!Page.IsPostBack)
{
TeklifSayisi();
}
}
void TeklifSayisi()
{
try
{
con.Open();
int i = Convert.ToInt32(cmd.ExecuteScalar());
if (i > 0)
{
lnkTeklifSayisi.Text = “(“ + i.ToString() + “)”;
}
else
{
lnkTeklifSayisi.Text = “”;
}
}
catch (Exception)
{
throw;
}

finally { con.Close(); }

SqlConnection con = new SqlConnection(ConfigurationManage r.ConnectionStrings[“LocalSqlServer”].ConnectionString);

SqlCommand cmd = new SqlCommand(“Select Count(Kim) From ArkadasListesi where kim=@UserId and OnaylandiMi = ‘False’”, con);

cmd.Parameters.AddWithValue(“@UserId”, Membership. GetUser(User.Identity.Name).ProviderUserKey);

}

Liste 1.41: Arkadaslarim.aspx.cs Page_Load olayı ve TeklifSayisi metodu.

GetUser(User.Identity.Name).ProviderUserKey); } Liste 1.41: Arkadaslarim.aspx.cs Page_Load olayı ve TeklifSayisi metodu.

herkesburada.com

herkesburada.com 61 lnkTeklifSayisi ismindeki Linkbutton kontrolünün text özelliği başlangıçta boş bırakıldı.

61

lnkTeklifSayisi ismindeki Linkbutton kontrolünün text özelliği başlangıçta boş bırakıldı. Eğer teklif varsa Text dolacak ve dolayısıyla tıklanabilir bir hale gelecek. Eğer tıklanabiliniyor ise tekliflerim. aspx sayfasına yönlendirin.

protected void lnkTeklifSayisi_Click(object sender, EventArgs

e)

} { if (e.CommandName == “MesajGonder”) { } else if (e.CommandName == “AlbumGoruntule”) { }
}
{
if (e.CommandName == “MesajGonder”)
{
}
else if (e.CommandName == “AlbumGoruntule”)
{
}
else if (e.CommandName == “ProfilGoruntule”)

Response.Redirect(“~/Kullanici/Tekliflerim.aspx”);

Response.Redirect(“~/Kullanici/Tekliflerim.aspx”); { Liste 1.42: lnkTeklifSayisi linkbutton kontrolü Click

{

Liste 1.42: lnkTeklifSayisi linkbutton kontrolü Click olayı.