Asp.Net

Arkadaşlar merhaba. Bir önceki dersimizde haberekle.aspx sayfası oluşturup Access veri tabanındaki haberler tablosuna girilen haberleri eklemiş. Daha sonrada haberler tablosunda eklenen haberleri haberlisteleme.aspx sayfası oluşturup aşağıdaki gibi haberlerin özetini sayfamızda listelemiştik.

Şimdiki dersimizde haberlisteleme.aspx sayfasında listelediğimiz haber özetinin altına Devamını Oku şeklinde bir link ekleyip, linke tıkladığımızda tıklanan haberin ayrıntısını haberayrinti.aspx sayfasında göstereceğiz.

Bunun için öncelikle haberlisteleme.aspx sayfamızı açıp page_load olayına yazdığımız aşağıdaki kod buluğuna kırmızı renkte yazdığım kodları ekliyoruz.

while (alinan_veri.Read())

{

icerikveri.Text += “<div id=’kutu’>”;

icerikveri.Text += “<h3 align=center>” + alinan_veri[“baslik”].ToString() + “</h3>”;

icerikveri.Text += “<img src=’/resimler/” + alinan_veri[“resim”].ToString() + “‘>”;

icerikveri.Text += “<p>” + alinan_veri[“icerik”].ToString().Substring(1,100) + “</p>”;

icerikveri.Text += “<a href=’haberayrinti.aspx?secilen=” + alinan_veri[“Kimlik”].ToString() + “‘>Devamını Oku</a><br>”;

icerikveri.Text += “<span>Kategori: “ + alinan_veri[“kategori”].ToString() + “</span>”;

icerikveri.Text += “<br><span>Eklenme Tarihi: “ + alinan_veri[“tarih”].ToString() + “</span>”;

icerikveri.Text += “</div>”;

}

Yukarıda kalın kırmızı renkli kodumuzu haberlisteleme.aspx sayfası için yazdığımız kod bloğuna ekledik.

Peki ne işe yarıyor bu kod. <a komutu ile link vereceğimizi belirttik.

href=’haberayrinti.aspx?secilen=” + alinan_veri[“Kimlik”].ToString() + “

bu bu komut ile haberayrinti.aspx isminde bir sayfaya yönlendiriyoruz. Ama yönlendirirken hangi haberin içindeki Devamını oku linkine tıkladı isek o haberin. Kimlik numarasınıda “seçilen” isminde bir değişkene aktararak gönderiyoruz.

Örneğin Kimlik numarası ( alinan_veri[“Kimlik”].ToString()) 3 olan haber tıkladığımızda link ;

<a href=”haberayrinti.aspx?secilen=3″>Devamını Oku</a> şeklinde olacak ve bizi http://localhost:19073/haberayrinti.aspx?secilen=3 seklinde bir linke yönlendirecektir.

Buradaki secilen=3 değeri bize hangi haber tıklandığını bildirecek ve biz bu değere göre haberayrinti.aspx sayfasında o haberi göstereceğiz. Örneğimizde secilen=3 olduğu için Access dosyamızdaki haberler tablosunda Kimlik değeri 3 olan haberin ayrıntısını göstereceğiz.

Bu bize ne gibi avantaj sağlıyor ?
Html ve css kullanarak statik yaptığınız web sitelerinde;  örneğin bir haber sitesi yapıyorsanız, her haber için 1 sayfa oluşturmak zorundaydınız. Yani siteye 10 haber ekleyecekseniz 10 adet haber için ayrı ayrı sayfalar oluşturmanız gerekiyordu.

Ama burada Asp.Net ile her haber için ayrı ayrı sayfa oluşturmuyoruz. 1 adet sayfa oluşturup, tüm haberlerimizi haberayrinti.aspx?secilen=3 linkindeki Kimlik numarasını kullanıp tek bir sayfada göstereceğiz. Yani, veri tabanında 100 adet haberimizde olsa tek bir haberayrinti.aspx sayfası ile haberlerin hepsini bu tek sayfa üzerinden göstereceğiz.

Kodu ekledikten sonra haberlisteleme.asx sayfamız aşağıdaki gibi olacaktır. Ok ile işaretlediğimiz Devamını oku
linkine tıkladığımızda bizi hangi habere tıkladık isek o haberin Kimlik numarası ile beraber bizi haberayrint.aspx sayfasına yönlendirecektir.

Şimdi haberayrinti.aspx sayfamızın tasarımına geçelim. Solution Explorer ekranımızdaki proje ismimize sağ tıklayıp Add->Add News Item diyerek açılan sayfadan Web Formu seçip ismini haberayrinti.aspx olarak ayarladıktan sonra sayfamızı oluşturuyoruz.

Haberayrinti.aspx sayfamızı ben aşağıdaki şekilde tasarladım. Siz kendinize göre farklı tasarımlarda kullanabilirsiniz.

Haber Başlığı Gelecek


Haber Resmi

Haber İçeriği Gelecek :

Lorem Ipsum, dizgi ve baskı endüstrisinde kullanılan mıgır metinlerdir. Lorem Ipsum, adı bilinmeyen bir matbaacının bir hurufat numune kitabı oluşturmak üzere bir yazı galerisini alarak karıştırdığı 1500’lerden beri endüstri standardı sahte metinler olarak kullanılmıştır. Beşyüz yıl boyunca varlığını sürdürmekle kalmamış, aynı zamanda pek değişmeden elektronik dizgiye de sıçramıştır. 1960’larda Lorem Ipsum pasajları da içeren Letraset yapraklarının yayınlanması ile ve yakın zamanda Aldus PageMaker gibi Lorem Ipsum sürümleri içeren masaüstü yayıncılık yazılımları ile popüler olmuştur.

Kategori: Kategori İsmiEklenme Tarihi: Tarih

Geri Dön

Şimdi sayfamıza , row=4 colomns=3 olan tablo ekliyoruz.

İlk Satırdaki sütunları birleştiriş haber başlığı yazağımız Label kontrolü ekleyip properties ten id sini baslik olarak değiştirip Text içeriğindeki değeri siliyoruz.

2. satırdaki sütunları birleştirip toolbox ekranından Image kontrolü ekliyoruz. Properties ekranından Id özelliğini resim olarak değiştiriyoruz.

3. satırdaki sütunları birleştirip haber ayrıntısını göstermek için Toolbox ekranından sayfamıza Literal kontrolü ekliyoruz. Literal kontrolünün Id sini icerik olarak olarak değiştiriyoruz.

4.Satırdaki 1. Sütuna Kategori: yazıp yanına label ekliyoruz id sini kategori olarak değiştiriyoruz. 2. Sütuna Eklenme Tarihi: yazıp yanına label ekliyoruz ve id sini tarih olarak değiştiriyoruz. Son olarakta 3. Sütuna ToolBox tan HyperLink ekleyip Properties Ekranından Text’ini “Geri Dön” olarak değiştirip NavigateUrl seçeneğinden … noktayı tıklayıp açılan listeden haberlisteleme.aspx sayfasını seçiyoruz. Bu linkte tıkladığımızda bizi haberlisteleme.aspx sayfasına yönlendirecektir.

Tasarım işimiz bitti sayfamızın son hali aşağıdaki şekildedir.

Tasarım bittikten sonra haberlisteleme.aspx sayfamızdaki ilgili habere tıklandığında bu sayfamızda gösteceğiz. Bunun için sayfanın Page_Load olayına kodlarımızı yazacağız. Haberayrinti.aspx sayfamızdaki boş bir yere çift tıklayıp Page_Load kod ekranına giriyoruz.

Sayfamızın üst kısmındaki kütüphaneye

using System.Data;

using System.Data.OleDb;

kodlarını ekliyoruz.

Page_Load yardımına

OleDbConnection baglanti = new
OleDbConnection(“Provider=Microsoft.ACE.OLEDB.12.0;Data Source=”+ Server.MapPath(“App_data\\proje.accdb”));

Komutu yazıp veri tabanı bağlantıını yapıyoruz.

Herhangi bir hata durumunda sayfanın çökmemesi için kodlarımızı aşağıdaki gibi try catch bloğu arasına yazıyoruz.

try

{

baglanti.Open();


String secilen = Request.QueryString[“secilen”];


OleDbCommand db_komut = new
OleDbCommand(“Select * from haberler where Kimlik=”+secilen, baglanti);


OleDbDataReader alinan_veri;

alinan_veri = db_komut.ExecuteReader();


if (alinan_veri.HasRows)

{

alinan_veri.Read();

baslik.Text +=alinan_veri[“baslik”].ToString();

resim.ImageUrl = “/resimler/” + alinan_veri[“resim”].ToString();

icerik.Text = alinan_veri[“icerik”].ToString();

kategori.Text = alinan_veri[“kategori”].ToString();

tarih.Text = alinan_veri[“tarih”].ToString();

baglanti.Close();

}

}


catch

{

icerik.Text = “Bağlantı da bir problem var”;

}

Şimdi komutlarımızı tek tek açıklayalım.

baglanti.Open();
komutu ile bağlantımızı açtık.

String secilen = Request.QueryString[“secilen”]; komutu ile adres satırından haberlisteleme.aspx sayfasından gönderilen http://localhost:19073/haberayrinti.aspx?secilen=3 adresindeki 3 değerini çekiyoruz. Bu bizim göstereceğimiz haberin Kimlik nosu.

OleDbCommand db_komut = new OleDbCommand(“Select * from haberler where Kimlik=”+secilen, baglanti); komutu ile sorgumuzu yazdık. Bu sorguda diğer yazdığımız sorgulardan farklı olarak “where” ifadesini kullandık. “Select * from haberler” sorgusu haberler tablosundaki tüm kayıtları çeker. Ama biz sadece Kimlik değeri 3 olan kaydı çekmemiz gerekiyor bu yüzden “where” ifadesini kullanarak şart koştuk.

Where Kimlik=secilen ifadesi ile Kimlik değeri secilene (yani 3) eşit olan haberi çektik. Yani tüm haberler yerine Kimlik değerinde 3 bulunan haberi çektik.

if (alinan_veri.HasRows)

{

alinan_veri.Read();

baslik.Text +=alinan_veri[“baslik”].ToString();

resim.ImageUrl = “/resimler/” + alinan_veri[“resim”].ToString();

icerik.Text = alinan_veri[“icerik”].ToString();

kategori.Text = alinan_veri[“kategori”].ToString();

tarih.Text = alinan_veri[“tarih”].ToString();

baglanti.Close();

}

Komutu ile öncelikle if ile yukarıdaki sorgu sonucunda kayıt çekilip çekilmediğini kontrol ettirdik. Öyle bir kayıt var ise alinan_veri.read() komutu ile kaydımızı okuduk. Ve daha sonra tasarım ekranında oluşturduğumuz baslik, resim, icerik, kategori, tarih kontrollerine veri tabanından çektiğimiz değerleri aktardık.

Kod ekranımızın son hali aşağıdaki gibidir.


*** Haberayrinti.aspx sayfamızı direk çalıştıramayız. Çünkü hangi haberi göstereceğimizi adres satırında belirtmemiz gerekiyor. Bunun için haberlisteleme.aspx sayfamızı çalıştırıp içeriğini görmek istediğimiz haberdeki “Devamını oku” linkine tıklamamız gerekiyor.

Haberayrinti.aspx sayfamızın son hali aşağıdaki gibidir.


Çalışmamız burada bitti. Bir sonraki çalışmamızda kullanıcı girişi oturum işlemleri olacaktır.

Bir Yorum Bırakın