ASP.NET ÇALIŞMA NOTLARI İnternet sunucu istemci modeline göre çalışır. Fiziksel olarak bu sistem genelde isteği yapan bilgisayar(client) ve bu isteği karşılayan özel bir bilgisayar(server) şeklinde işler. İSTEMCİ TARAFLI (CLİENT-SİDE) SCRİPTİNG Web deki anlamıyla script; konusu web(sayfası) olan program veya programcıklarıdır. Script ler sayesinde bir web sayfası çok daha yetenekli ve işlevsel olabilir. İstemci taraflı scriptler barındıran bir sayfanın işleyişinde sunucunu hiçbir fonksiyonu yoktur. SUNUCU TARAFLI (SERVER-SİDE) SCRİPTİNG Sunucu taraflı sayfa veya scripting, istemci taraflı scripting in karşıtıdır. Burada script ler özel belirteçlerle, sunucu taraflı olduğunu bildirir ve bunlar sunucu tarafından işlenerek, çıktıları yine HTML formatında, istemciye gönderilir. Kullanıcılar,sayfa vasıtasıyla ile gelen veriler sunucuda işlenerek saklanabilir. Sayfa yeniden düzenlenebilir ve bunun gibi şeyler yapılabilir. ASP.NET VE OLAY YÖNLENDİRMELİ MODEL (EVENT DRİVEN) İstek-cevap modeline ilişkin vurgulanması gereken son nokta bağlantısızlıktır. Bunun anlamı istemci ile sunucu arasında daimi bir bağlantı olmamasıdır. Bağlantısızlık web yazılım geliştiricilerinin aşması gereken en önemli problemlerden bir tanesidir. Programcılıkta olay yönlendirme herhangi bir rutinin, programın veya programcığın çalışmasını başlatmak için gereken eylemdir. Bir butona basmak, bir kutucuğu işaretlemek, bir seçeneği tıklamak; kısaca bir eylem, olayı oluşturabilir. Olay yönlendirme mantığını internet ortamında tesis etmek zordur. Çünkü ortada istemci ve sunucu olmak üzere iki ayak vardır ve bunlar da sürekli bağlantı halindedir. Asp.net bu zorluğu aşmıştır. Asp.net bağlantısızlık problemini aşmak için, istemci taraflı scriptleri ve asp.net özgü yeni teknikler kullanır. NET NEDİR?.Net Framework, Microsoft tarafından geliştirilen, açık internet protokolleri ve standartları üzerine kurulmuş komple bir uygulama geliştirme platformudur. Zengin kütüphanesi ile sınırları ortadan kaldıran web servisidir.
Bu dillerde yazılan programların çalışma mantığı ise; C# yazılan kodu MSIL Assembly'e, Assembly'i de CLR'e çevrilerek çalıştırılabilir bir makina koduna dönüşür. XML Xml.net in odak noktasıdır. Xml günümüzde veri depolaması, yönetimi ve kullanımın temel standadı olmuştur. Platform bağımsız yapısı, kolay geliştirilebilmesi ve basit mantığıyla, endüstrinin üzerinde uzlaştığı bir dildir. COMMON LANGUAGE RUTİME(CLR) CLR (Common Language Runtime),.NET altyapısında programların çalışmasını denetleyen, programın işletim sistemiyle haberleşmesini sağlayan birimdir. Yazılan programın her işletim sisteminde (Windows, Linux, MacOS) çalışmasını sağlamak görevi CLR'e düşer. En basit ifadeyle,uygulamalar hangi dille geliştirilirse geliştirilsin, hepsi CLR sayesinde çalışır. ASP.NET TANIMI ASP.NET dilediğimiz programlama dilini kullanarak, olay yönlendirmeli web uygulamaları geliştirmemizi sağlayan.net platformunun web uygulamaları geliştirme teknolojisidir. Asp 'den farklı bir ortamda yazılan kodların IIS ile entegre çalışan.net Framework bu çalışma ortamının en büyük faydası uyumluluk ve dayanıklılıktır. ASP.NET VERSİYONLARI ASP.NET 1.0: ilk versiyonudur versiyon numarasından da anlayacağınız gibi en geniş ve kapsamlı versiyonudur.asp.net temel yapısıda bu versiyon ile atılmıştır. ASP.NET 1.1 : Bu versiyon ise hemen arkasından çıkmış Şahsi incelememe göre arkadaşlar sadece bir sonraki sürüm olsun diye çıkarılmıştır. İncelediğiniz zamanda farkına varırsınız sadece performans ayarlamaları ve bug düzeltimleri yapılmıştır başkada bir yeniliği yoktur. ASP.NET 2.0 : İki sürümün arkasında gelen bu sürüm pek çok özellik katmıştır bunlardan en belirgin olan özelikleri söylemek gerekirse code behind deki yeniliktir eskiden Code behind dosyalarla çalışırken her bir kod değişikliğinde derleme ihtiyacı gerekirken, bu versiyon ile yapılan değişiklikler anında etkin olabiliyor benim en sevdiğim yenilikden birisi uzun kod yazımlarında gerçekten çok zaman kazandırıyor diye biliriz. ASP.NET 3.5 : Şu anki en güncel sürümüdür.bu versiyon ile arkadaşlar artık tamamıyla AJAX,SILVERLIGHT ve LINQ teknolojileri kullanmamızı sağlamaktadır.
1.UYGULAMA UYGULAMALAR VE AÇIKLAMALARI <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Web_basit_uygulama1.WebForm1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <script runat ="server"> private void Page_load(object sender, EventArgs e) Mesaj.Text = "Merhaba! bu sayfayı görebiliyorsanız ASP.NET ile çalışmaya hazırsınızdır..."; </script> <body text="label"> <asp:label ID="Mesaj" runat="server"></asp:label> Asp.net içerisinde yordamları iki türlü yazabilmekteyiz. Bunlar ya aspx dosyamız içinde script runat ="server"></script> bloğu içerisine yazabiliyoruz ya da aspx.cs dosyası içine yordamlarımızı yazabiliyoruz Bu örneğimiz script bloğumuzun içerisine Page_load yordamı altında Mesaj.Text = "Merhaba! bu sayfayı görebiliyorsanız ASP.NET ile çalışmaya hazırsınızdır..."; yazarak programımızı çalıştırıyoruz Burada ki mesaj.text kodumuzda. Mesaj programamıza eklemiş olduğumuz labelimizin ID si dir. <script runat ="server"> kodundaıki runat= server tanımlaması ise server(sunucu) tabanlı çalıştığımızı göstermektedir. Bu kod parçasının çalışması ise derlendiği zaman label aracılığıyla mesajımızı sayfamıza yazdırıyoruz. VİEWSTATE Asp.net ile gelen yeni bir kavram olan viewstate bir web formundaki elemanların mevcut durumunu saklar. Olayların gerçekleşip gerçekleşmediğini kontrol eder. Web geliştirme ortamı için çok büyük bir yenilik ve kolaylıktır. Viewstate değerleri kesinlikle ziyaretçinin (client) sayfasında saklanır ve sunucu da hiçbir yer kaplamaz. SAYFALARA NAMESPACE EKLEMEK
Namespace; üzerinde çalışacak uygulama ve programların alt yapısını oluşturan classların (sınıfların) toplamından oluşur. Aynı isimlendirme altında bir çok class, o isimle uzayın(ortamın) oluşturulmasını sağlar. <%@ Import Namespace="namespace'nin ismi %> Bir namespace i import etmemiz için aşağıdaki şekilde bir bildirimi sayfanın başında kullanmalıyız. 2.UYGULAMA İF ELSE DEYİMİ Bu uygulamamızda string olarak bir isim tanımlaması yapıyoruz. Daha sonra if else deyimi kullanarak yazılan isimleri ekrana çıktı olarak aldıyoruz. Eğer tanımladığımız isimlerin dışında farklı bir isim giriliyorsa da ismin egemen, gizem, gökhan değil" şeklinde bir mesaj karşımıza çıkıyor. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="İf_else.aspx.cs" Inherits="Web_İf_else_deyimi.İf_else" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <script runat="server"> private void Page_Load(object sender, EventArgs e) string isim = "Ezgi"; if (isim == "Egemen") Response.Write("ismin egemen"); else if (isim == " gizem") Response.Write("ismin gizem"); else if ( isim == "gökhan") Response.Write("ismin gökhan"); else Response.Write("ismin egemen, gizem, gökhan değil"); </script> <body> 3.UYGULAMA SAYFA DETAYLARINI ANLATAN UYGULAMA
Bu uygulamamızda ilk olarak design kısmında bir label, bir textbox ve bir buton ekliyoruz. Daha sonra eklediğimiz elemanların ID lerin sırasıyla label ID : mesaj, textbox ID : isim_kutusu ve buton ID mizi de buton olarak tanımlıyoruz. Daha sonra script bloğumuzun içerisine private void isim_girdisi(object sender, EventArgs e) mesaj.text = "merhaba" + isim_kutusu.text + "...asp.net e hosgeldiniz <br>" + DateTime.Now.ToString(); // sayfada yazdırılan mesajın içeriği Yordamını tanımlıyoruz. Bu yordamda buton a basıldığı an textbox a hangi metni girdiysek "...asp.net e hosgeldiniz ifadesiyle birleştirirek label a yazdırıyoruz. WEB FORMLARI Html formları : HTML tagları sayesinde, tamamıyla istemcinin bilgisayarı vasıtasyla oluşturulurlar. Web formları : tamamıyla sunucuda oluşurlar. 4. UYGULAMA HTML VE WEB FORM Bu uygulamamızda 2 adet buton ve 1 adet labelimiz var. Butonlar tamamıyla aynı görünen ve aynı işi yapan butonlardır. Aşağıdaki kod da göreceğimiz üzere mesaj yazdır butonu web form olarak mesaj sil butonu ise html form elemanı olarak yaratıldı. Yani ilk buton web kontrolleri tarafından kontrol edilirken ikinci buton runat= server ifadesiyle bir sunucu kontrolüne dönüşüyor. Kısaca anlatmak istersem 1. Buton toolbox tan web form olarak ekliyoruz fakat 2.buton input type = buton kodu ile sayfa çalıştığı anda yaratılıyor. Yani biz toolboxtan eklemiyoruz webte kendi kendine oluşuyor. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Form1.aspx.cs" Inherits="Web_Buton_Farkı.Form1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <script runat="server"> private void yazdir(object sender, EventArgs e) // buton tıklandığında yapılması istenilen işlem! mesaj.text = "buton'a tıkladınız"; private void sil(object sender, EventArgs e) // butona tıklandığında yapılması istenilen işlem! mesaj.text = " "; </script>
<body> /> <asp:button ID="buton_1" runat="server" Text="mesaj yazdır" OnClick="yazdir" <p /> <input type="button" value="mesajı sil" onserverclick="sil" runat="server" /> <p /> <asp:label ID="mesaj" runat="server" Text="Label"></asp:Label> SUNUCU KONTROLLERİ VE OLAYLAR (EVENTS) Sunucu kontrollerinde olay bildirimi Onclick gibi standart ifadelere dayanır ve karşılığında olay gerçekleştiği zaman işletilmesi gereken yordamın referansı verilir. Böylece olaya bağlı işlemler gerçekleştirilir. Her kontrolün kendine özgü standart olay bildirimleri vardır. 5.UYGULAMA OLAY METHOD UYGULAMASI Bu örneğimizde sayfamızda 3 adet buton olucak ve yazdir methodumuz olucak ve bu 3 buton dan hangisi bu methodu çağırdıysa ona ait metin özelliği sayfada gözükücek. Yani mesaj yazdır buton a tıkladığımızda mesaj yazdır yazacaktır. Yazdır butona tıklarsak ta ekran da yazdir yazacaktır. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="olaymetot.aspx.cs" Inherits="Web_olay_metot.olaymetot" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <script runat="server"> void yazdir(object nesne, EventArgs e) Response.Write("butona tıkladın <br>" + ((Button)nesne).Text);
</script> <body style="height: 108px; width: 929px"> <asp:button ID="Btn_1" runat="server" Text="mesaj yazdır" OnClick="yazdir" /> <asp:button ID="Btn_2" runat="server" Text="yazdır" OnClick="yazdir" /> <asp:button ID="Btn_3" runat="server" Text="mesaj" OnClick="yazdir" /> WEB FORMLARININ POSTALANMASI Sunucuya 2 şekilde veri postalanır. Hemen veya biriktirilerek. Biriktirilerek : formdaki elemanlara ait bütün veriler, tek bir seferde bir buton sayesinde sunucuya gönderilir. Hemen : form elemanı ile işimiz biter bitmez hemen sunucuya postalanır. yani buton a gerek yok. Hemen postalama yapma istiyorsak kontrol bildirimimize AutoPostBack = true ifadesi kullanmalıyız 6.UYGULAMA POST İŞLEMİ Uygulamamızda 3 adet textbox, 3 adet label ve 1 adet buton olucak. Textboxlara veriler girilecek ve bunlar sayfada labellara yazdırılacak. Bu örneğimizde isim ve soyisim textboxlarımızda autopostbacak olduğu için veri girildiği gibi işlem yapılacak. Mesleğin yazdırılması için ise buton a tıklanması gerekiyor. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Web_Posta_olayı.WebForm1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <script runat="server"> void yazdir(object sender, EventArgs e) isim_mesaj.text = isim.text; soy_isim_mesaj.text = soy_isim.text; meslek_mesaj.text = meslek.text; </script>
<body style="height: 411px; width: 383px"> <asp:label ID="isim_mesaj" runat="server"></asp:label> İsim: <asp:textbox ID="isim" runat="server" OnTextChanged="yazdir"></asp:TextBox> <asp:label ID="soy_isim_mesaj" runat="server"></asp:label> Soy isim: <asp:textbox ID="soy_isim" runat="server" OnTextChanged ="yazdir" AutoPostBack="true"> </asp:textbox> <asp:label ID="meslek_mesaj" runat="server"></asp:label> Meslek: <asp:textbox ID="meslek" runat="server" OnTextChanged="yazdir"></asp:TextBox> <p /> <asp:button ID="Button1" runat="server" OnClick="yazdir" Height="45px" Text="Gönder" Width="83px" /> <p /> 7. UYGULAMA ISPOSTBACK ÖZELLİĞİ Sayfanın geri postalanma özelliğidir. Sayfanın ilk yüklendiği durum ile sonrasında olan işlemleri belirlemede kullanılır. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Web_Is_post_back.WebForm1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <script runat="server"> private void Page_Load(object sender, EventArgs e) // sayfa ilk kez yüklendiğimiz karşımıza çıkacak olan yordam. if (!Page.IsPostBack)
karsilama.text = "merhaba bu sayfa ilk kez yüklendiğinde ve sunucudan bir geridöndürüm(postback) olmadığından bu yazı görülmektedir...<br>"; private void yazdir(object sender, EventArgs e) // bir butona tıkladığımızda sunucuya bir postalama işlemi gerçekleştirdik. if (Page.IsPostBack) karsilama.text="sunucudan geri döndürüm(post back) yapıldığından, biraz öncek mesajın yerini şimdi okuduğumuz bu mesaj alacaktır...<br>"; mesaj.text="butona tıkladın"; </script> <body> <asp:label ID="karsilama" runat="server"></asp:label> <asp:label ID="mesaj" runat="server"></asp:label> <asp:button ID="Button_yazdir" runat="server" OnClick="yazdir" Text="mesaj yazdır" /> Burada yapılmak istenilen sayfa ilk yüklendiğinde bir mesaj olucak. Buton a basıldığında yani postback yapıldığında başka bir mesaj çıksın. 8.UYGULAMA TUR REHBERİ Bu uygulamamızda öncelikle tur bilgilerimizi oluşturmamız gerekicek. Bunun için solution Explorer kısmında proje ismimizin üstende sağ tıklayarak add- new item yolunu izleyerek buradaki data kısmından bir xml file ı projemize ekliyoruz ve daha sonra içini doldurmaya başlıyoruz. turlar.xml <?xml version="1.0" encoding="utf-8"?> <turlar-rehber>
<tur> <tur-adı>ege Turu</tur-adı> <güzargah>aydın, İzmir, Ayvalık, Çeşme, Kuşadası</güzargah> <başlangıç-tarihi>10-10-2012</başlangıç-tarihi> <bitiş-tarihi>17-10-2012</bitiş-tarihi> <ulaşım>otobüs</ulaşım> <konaklama>4 yıldızlı Otel</konaklama> </tur> <tur> <tur-adı>karadeniz Turu</tur-adı> <güzargah>bolu, safranbolu, Sinop, Samsun, Trabzon</güzargah> <başlangıç-tarihi>01-08-2012</başlangıç-tarihi> <bitiş-tarihi>11-08-2012</bitiş-tarihi> <ulaşım>otobüs, dönüş uçak</ulaşım> <konaklama>3,4 yıldızlı Otel</konaklama> </tur> <tur> <tur-adı>trakya Turu</tur-adı> <güzargah>keşan, Uzunköprü, Edirne, Tekirdağ, Erikli</güzargah> <başlangıç-tarihi>01-07-2012</başlangıç-tarihi> <bitiş-tarihi>08-07-2012</bitiş-tarihi> <ulaşım>otobüs</ulaşım> <konaklama>2,3 yıldızlı Otel</konaklama> </tur> </turlar-rehber> Burada tur rehberi tagleri altına turadı güzergah başlangıç bitiş tarihleri ulaşım ve konaklama bilgilerini kaydetmiş olduk. Şimdi ise aspx dosyamızda verileri çekip görüntüleyen kodumuzu yazalım Bunun için GridView kontrolüme ihtiyacımız olacak. Bu kontrolümüz herhangi bir veri kaynağından verileri belirli bir şablonda göstermeye yarayan bir kontroldür. Bu örneğimiz de bizim veri kaynağımız ise xml dosyamızdır. Bu örneğimizde veri kaynağımız olduğu için aspx dosyamıza bir namespace import etmemiz gerekiyor. Bu namespace veri ile ilişkili olucaktır ve bu namespace imiz <%@ Import Namespace="System.Data" %> dir. Burada veriler bir gridview kontrolü sayesinde, çok kolay bir şekilde sayfada tablo halinde gösterilebilir. turrehberi.aspx <%@ Import Namespace="System.Data" %> <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TurlarRehberi.aspx.cs" Inherits="Web_turrehberi.TurlarRehberi" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <script runat="server"> void Page_Load(object sender, EventArgs e) DataSet ds = new DataSet(); ds.readxml(server.mappath("turlar.xml")); GridView1.DataSource = ds; GridView1.DataBind(); </script> <body> <asp:gridview ID="GridView1" runat="server" EnableViewState="true"> </asp:gridview> ds.readxml(server.mappath("turlar.xml")); koduyla verileri hangi fiziksel yoldan çekiceğimizi belirledik. 9.UYGULAMA COOKİE Cookie : Türkçesi kurabiye ve ya çerezdir. Kullanıcının bilgisayarında saklanan ve sunucunun kullanıcı hakkında bir takım bilgileri elde edebildiği derğerler saklayan küçük dosyalardır. Öncelikle cookie yi elde eden sayfamızı oluşturup daha sonra bu cookie yi başka bir sayfada tekrar elde edip kullanıcağız. Cookie.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="cookie.aspx.cs" Inherits="WebCookie.cookie" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <script runat="server"> private void Page_Load(object sender, EventArgs e) Response.Cookies["renk"].Value = "kırmızı";
private void sayfa_atla(object sender, EventArgs e) Response.Redirect("cookie_elde_et.aspx"); </script> <body> <p style="height: 287px; width: 686px" /> /> <asp:button ID="Button1" runat="server" OnClick="sayfa_atla" Text="Button" Cookie_elde_et.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="cookie_elde_et.aspx.cs" Inherits="WebCookie.cookie_elde_et" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <script runat="server"> private void Page_Load(object sender, EventArgs e) Response.Write(Request.Cookies["renk"].Value.ToString()); </script> <body> Yeni sayfamızda, renk Cookie mizin değeri elde edilip sayfamıza yazdırılıyor. WEB FORM ELEMANLARI 10.UYGULAMA ADROTATOR FORM ELEMANIYA REKLAM YAPMA Adrotator internet reklamlarını yöneten kontroldür. Sayfa her yüklendiğinde, belirtilen koşullarda rastgele bir resim çıkartır.
Aynı zamanda resimlere link ekler ve yönetimini yapar. Bu kontrolün reklam konfigürasyonu ayrı bir xml dosyasında yapılır. Adrotator kontrolü bu xml dosyasına bağlanarak belirtilen reklamları gösterir. Yine solution Explorer kısmından xml dosyamızı ekliyoruz ve yazmaya başlıyoruz : Reklamlar.xml <?xml version="1.0" encoding="utf-8"?> <Advertisements> <Ad> <ImageUrl>resimler\Koala.jpg</ImageUrl> <NavigateUrl>http://www.google.com</NavigateUrl> <AlternateText>Deniz Anası</AlternateText> <Keyword>Deniz Canlıları</Keyword> <Impressions>80</Impressions> </Ad> <Ad> <ImageUrl>resimler\Jellyfish.jpg</ImageUrl> <NavigateUrl>http://www.google.com</NavigateUrl> <AlternateText>Koala</AlternateText> <Keyword>Hayvanlar</Keyword> <Impressions>80</Impressions> </Ad> </Advertisements> Burada olan resimlere erişebilmek için ImageUrl>resimler\Koala.jpg</ImageUrl> Tag ini kullanıyouz yani resmimizin yolunu belirtiyoruz resimlerimizi de yine aynı şekilde solution Explorer altında resimler adında bir klasör oluşturup onun içine ekliyoruz ki resimlerimiz her zaman bizimle olsun. <NavigateUrl>http://www.google.com</NavigateUrl> kısmında reklamımıza tıklayınca hangi adrese gidiceğini belirtiyoruz. <AlternateText>Deniz Anası</AlternateText> kısmında da resimin üzerine gelince gösterilecek olan yazıyı belirtiyoruz. <Impressions>80</Impressions> resmimizin gösterilme sıklığı <Keyword>Deniz Canlıları</Keyword> ise resmimiz hangi gruba aitse onu gösterir. Adrotator.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebReklamlar2.WebForm1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <script runat="server">
</script> <body> <asp:adrotator ID="reklam" AdvertisementFile="reklamlar.xml" runat="server" /> Burada ise sadece adrotator kontrolümüzün içine AdvertisementFile="reklamlar.xml" runat="server" /> Özelliği ekleyerek reklam verileri nereden çekeceğimizi belirtiyoruz. 11.UYGULAMA CHECKBOXLİST Seçenek kutucuklarının sunucu versiyonudur. Bu kontrolün önemli özellikleri : Repeatlayout : seçeneklerin görüntülenme şeklini belirler. Table ve flow repeatdirection : elemanların sıralanam yönüdür.horizontal (yatay) ve vertical(dikey) checkboxlist.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CheckBoxList.aspx.cs" Inherits="Webcheckbox.CheckBoxList" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <body> <asp:checkboxlist ID="secenek_listesi" runat="server"> <asp:listitem>kitap</asp:listitem> <asp:listitem>cd</asp:listitem> <asp:listitem>poster</asp:listitem> <asp:listitem>bilgisayar</asp:listitem> <asp:listitem>kırtasiye</asp:listitem> <asp:listitem>dvd</asp:listitem> </asp:checkboxlist> <asp:checkbox ID="gosterim" runat="server" OnCheckedChanged ="gosterim_bicimi_degisti" Text="seçenekleri tablo olarak göster" />
<asp:checkbox ID="yon" runat="server" OnCheckedChanged="yon_degisti" Text="Yatay Göster" /> <asp:button ID="Button1" runat="server" OnClick="Buton_tıklandı" Text="Gönder" /> <asp:label ID="Label1" runat="server" Text="Label"></asp:Label> Burada sadece listemizi ve web form elemanlarımızı ekliyoruz. Bazı özellikleri de web formlarımızın içine ekliyoruz bunlar : OnCheckedChanged ="gosterim_bicimi_degisti" --- checkbox ın hangi yordama göre çalışacağını gösterir. OnClick="Buton_tıklandı" butonun hangi yordama göre çalışacağını gösterir. Checkboxlist.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace Webcheckbox public partial class CheckBoxList : System.Web.UI.Page protected void Buton_tıklandı(object sender, EventArgs e) string secilen = "seçtikleriniz:"; for (int i = 0; i<= secenek_listesi.items.count -1; i++) if(secenek_listesi.items[i].selected) secilen = secilen + secenek_listesi.items[i].text + ""; Label1.Text= secilen; protected void gosterim_bicimi_degisti(object sender, EventArgs e) if (gosterim.checked == true) secenek_listesi.repeatlayout = RepeatLayout.Table; else secenek_listesi.repeatlayout = RepeatLayout.Flow;
protected void yon_degisti(object sender, EventArgs e) if (yon.checked == true) secenek_listesi.repeatdirection = RepeatDirection.Horizontal; else secenek_listesi.repeatdirection = RepeatDirection.Vertical; if (gosterim.checked == true) ifadesiyle kutunun işaretlenip işaretlenmediğini kontrol edebiliyoruz. secenek_listesi.items.count ifadesiyle checkbox ta listedeki elemanların sayısını döndürür. secenek_listesi.repeatlayout = RepeatLayout.Table; ifadesiyle seçeneklerimizin görünme şeklini ayarlıyoruz. secenek_listesi.repeatdirection = RepeatDirection.Horizontal; ifadesiyle seçeneklerin yönünü ayarlıyorz. Checkbox ın temel olay tanımı oncheckchanged dir. Bu olay ifadesi seçenekte bir değişim olup olmadığının belirtir. 12. UYGULAMA DROPDOWNLİST Dropdownlist kontrolü bize aşağıya akan bir görünümle seçenekler sunar. Bu listeden seçilen değerlere göre işlem yapılır. Listede görmek istediğimiz seçenekleri <asp:listitem>pop</asp:listitem> şeklinde belirtebiliyoruz.
Listcontrol class özellikleri kullanabiliyoruz. Bunlardan birtanesi selecteditem dir.bu özellikle hangi seçeneğin tercih edildiği belirtilir. Dropdownlist.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Dropdown.aspx.cs" Inherits="WebDropDownList.Dropdown" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <body> <asp:dropdownlist ID="secenekler" OnSelectedIndexChanged="secim" runat="server"> <asp:listitem>pop</asp:listitem> <asp:listitem>rock</asp:listitem> <asp:listitem>jazz</asp:listitem> <asp:listitem>classic</asp:listitem> <asp:listitem>heavy Metal</asp:ListItem> <asp:listitem>blues</asp:listitem> </asp:dropdownlist> <asp:label ID="Label1" runat="server" Font- Names="Verdana"></asp:Label> Dropdownlist.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI;
using System.Web.UI.WebControls; namespace WebDropDownList public partial class Dropdown : System.Web.UI.Page protected void secim(object sender, EventArgs e) Label1.Text = "Seçtiğin Değer : " + secenekler.selecteditem.text; Bu örneğimizde seçeneğin text özelliğinden faydalanıyoruz ve bunu bir label kontrolüne atayarak seçimimizin sayfada görüntülenmesini sağlıyoruz. 13. UYGULAMA LİSTBOX Bu kontrolde seçenekler liste halinde bir kutu içerisinde gösterilir. Width ile kutunun genişliği, height ile yüksekliği belirlenebiliyor. Selectedindex, listedeki elemanların sıra numarasını belirtir. Listedeki elemanlar en baştan itibaren sıfırdan başlayarak numaralandırılır. Listbox.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebListBox2.WebForm1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <body> <asp:listbox ID="secim_kutusu" OnTextChanged="secim" AutoPostBack="true" runat="server"> <asp:listitem>ford</asp:listitem> <asp:listitem>mercedes</asp:listitem> <asp:listitem>bmw</asp:listitem> <asp:listitem>toyota</asp:listitem> <asp:listitem>honda</asp:listitem> <asp:listitem>opel</asp:listitem> </asp:listbox> <p /> <asp:label ID="Label1" runat="server" Text="Label"></asp:Label>
Listbox.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebListBox2 public partial class WebForm1 : System.Web.UI.Page protected void secim(object sender, EventArgs e) int a = secim_kutusu.selectedindex + 1; Label1.Text = "seçtiğiniz değer" + secim_kutusu.selecteditem.text + "<br> listedeki " + a + ". elemanını seçtiniz"; Burada listbox tan seçtiğimiz değeri label a yazdırıyoruz. 14. UYGULAMA RADİOBUTTON, RADİOBUTTONLİST Radiobuttonları tanımlanmış bir grup içinden sadece bir seçeneği işaretlememize imkan veren kontrollerdir. İki şekilde oluşturulabilir radiobutton ve radiobuttonlist şeklinde oluşturulabilir. 6 tane radio buton ekliyoruz. Her radiobutonun text özelliğinde text kısmında takımların ismini ekliyoruz. Grup özelleğinde de takım ve arabalar diye 2 ayrı grup oluşturuyoruz. Buton içine onclick özelliğiyle birlikte cs dosyamızda tanımladığımız gönder yordamını eşleştiriyoruz. Şimdi kodlarımızı inceliyoruz. RADİOBUTTON.ASPX <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebRadioButton2.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <body> <h3> Bir Takım Seçiniz </h3> <asp:radiobutton ID="RadioButton1" runat="server" GroupName="takimlar" Text="Galatasaray" /> <asp:radiobutton ID="RadioButton2" runat="server" GroupName="takimlar" Text="Fenerbahce" /> <asp:radiobutton ID="RadioButton3" runat="server" GroupName="takimlar" Text="Besiktas" /> <h1> Bir araba markası seçiniz </h1> <asp:radiobutton ID="RadioButton4" runat="server" GroupName="arabalar" Text="Toyota" /> <asp:radiobutton ID="RadioButton5" runat="server" GroupName="arabalar" Text="Mercedes" /> <asp:radiobutton ID="RadioButton6" runat="server" GroupName="arabalar" Text="Opel" /> <asp:button ID="Button1" runat="server" OnClick="gonder" Text="Gönder" /> <asp:label ID="Label1" runat="server" Font-Bold="true" Font- Size="14pt"></asp:Label> Radiobutton.aspx.cs using System.Collections.Generic; using System.Linq; using System.Web;
using System.Web.UI; using System.Web.UI.WebControls; namespace WebRadioButton2 public partial class WebForm1 : System.Web.UI.Page protected void gonder(object sender, EventArgs e) if (RadioButton1.Checked) Label1.Text = "Takım olarak;" + RadioButton1.Text; else if (RadioButton2.Checked) Label1.Text = "Takım olarak;" + RadioButton2.Text; else if (RadioButton3.Checked) Label1.Text = "Takım olarak;" + RadioButton3.Text; if (RadioButton4.Checked) Label1.Text += " <br>araba markası olarak;" + RadioButton4.Text + "seçtin"; else if (RadioButton5.Checked) Label1.Text += " <br>araba markası olarak;" + RadioButton5.Text + "seçtin"; else if (RadioButton6.Checked) Label1.Text += "<br>araba markası olarak;" + RadioButton6.Text + "seçtin"; Burada if döngüsü içinde hep aynı işlemleri yapıyoruz bunları anlatmak gerekirse : if (RadioButton1.Checked) Label1.Text = "Takım olarak;" + RadioButton1.Text; else if (RadioButton2.Checked) Label1.Text = "Takım olarak;" + RadioButton2.Text; Bölümünde tanımladığımız radiobutton umuz işaretlendiyese bunu text olarak label a yazdırıyoruz. Else if döngüsüyle de hangi radiobuttonu seçersek onu yazdırıyoruz. Gördüğümüz üzere 2 tane grubumuz var bunlar da arabalar ve takımlar için ayrı ayrı if bloğu uyguladık. Gruptan hangi buton işaretlendiyse buna göre işlem yapılıyor. 15. UYGULAMA RADİOBUTTONLİST Radiobutton la yaptığımız işlemleri şimdi de radiobuttonlist kontrolüyle yapalım.
Radiobutonliste oluşturma işlemi radiobutton a göre çok daha kolaydır. Burada extra olarak sayfa konumlandırmasını yatay dikey ve yapısını da tablo veya flow olarak seçebiliyoruz yani RepeatDirection ve RepeatLayout özelliği kullanıyoruz. Radiobuttonlist.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebRadioButtonList2.WebForm1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <body> <h4> Lütfen Bir Takım Seçiniz...</h4> <asp:radiobuttonlist ID="RadioButtonList1" RepeatLayout="Table" runat="server"> <asp:listitem Selected="True">Galatasaray</asp:ListItem> <asp:listitem>fenerbahce</asp:listitem> <asp:listitem>besiktas</asp:listitem> <asp:listitem>sanika Boru Elazığspor</asp:ListItem> <asp:listitem>bursaspor</asp:listitem> <asp:listitem>tavşanlı Linyit Spor</asp:ListItem> </asp:radiobuttonlist> <h4> Lütfen Bir Araba Markası Seçiniz...</h4> <asp:radiobuttonlist ID="RadioButtonList2" RepeatDirection="Horizontal" RepeatLayout="Flow" runat="server"> <asp:listitem>bmw</asp:listitem> <asp:listitem>mercedes</asp:listitem> <asp:listitem>audi</asp:listitem> <asp:listitem>toyota</asp:listitem> <asp:listitem>ford</asp:listitem> <asp:listitem>mazda</asp:listitem> </asp:radiobuttonlist> <asp:button ID="Button1" OnClick="sec" runat="server" Text="Seç" /> <asp:label ID="Label1" runat="server" Text="Label"></asp:Label> Burada gördüğümüz gibi 2 adet radiobuttonliste ekliyoruz ve listitem lerin sayısını arttırıp textlerini istediğimiz gibi düzenliyoruz. bunun dışında seçtiğimiz değerleri yazdırdığımız labelı ekliyoruz. Butona da yine aspx.cs dosyaında yarattığımız sec yordamını onclick özelliğiyle eşleştiriyoruz.
Radiobuttonlist.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebRadioButtonList2 public partial class WebForm1 : System.Web.UI.Page protected void sec(object sender, EventArgs e) Label1.Text = "Takım Olarak:" + RadioButtonList1.SelectedItem.Text; Label1.Text += "<br> Araba Markası Olarak: " + RadioButtonList2.SelectedItem.Text + " seçtin"; Burada sec yordamını tanımlıyoruz. Bu yordamın içinde label a hangi textleri yazdırdığımızı gösteriyoruz. 16. UYGULAMA PANEL PANEL: kontrolleri, sayfada programatik olarak oluşturmamıza yardımcı olan bir kontroldür. Panel kontrolü, içinde diğer kontrol veya kontrolleri barındırır ve bunları sayfada görüntüler. Programatik olarak oluşturmak = kontrolü kod kısmında tanımlayıp panel kontrolüne ekleyerek görüntülemek demektir. Panel in diğer bir avantajı ise içinde bulunduğu kontrolleri bir grup olarak görünür yada görünmez yapabiliriz. PANEL.ASPX
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Panel.aspx.cs" Inherits="WebPanel.Panel" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <body> <asp:panel ID="Panel1" runat="server" BackColor="Aqua" Height="237px" Width="390px"> </asp:panel> <asp:checkbox ID="gizle" runat="server" Text="Paneli Gizle" AutoPostBack="true" OnCheckedChanged="panel_gizle" /> Bu bölümde sadece panel ve checkbox ekliyoruz. Checkbox in amacı isminden de anlaşıldığı gibi paneli gizlemeyle ilgilidir. Yani checkbox işaretli olunca panale gizlenecektir. Bu olayı da OnCheckedChanged="panel_gizle" koduyla gerçekleştireceğiz. Yani panel gizle yordamına göre işlem yapacaktır. PANEL.ASPX.CS using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebPanel public partial class Panel : System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) TextBox metin_kutusu = new TextBox(); Panel1.Controls.Add(metin_kutusu); Button buton = new Button(); Panel1.Controls.Add(buton);
buton.text = "gönder"; protected void panel_gizle(object sender, EventArgs e) if (gizle.checked) Panel1.Visible = false; else Panel1.Visible = true; Burada Page_Load yordamında kontrollerimizi programatik olarak oluşturuyoruz. Panel in özelliğiydi bu. TextBox metin_kutusu = new TextBox(); bu kod ile textbox yarattık. Panel1.Controls.Add(metin_kutusu); burada yarattığımız textbox ı panele ekledik Button buton = new Button(); Panel1.Controls.Add(buton); buton.text = "gönder"; burada da buton yarattık. Buton u panel e ekledik ve extra olarak burada buton a text ekledik yani isim verdik. Panel_gizle yordamında da checkbox la birlikte kullanacağımız paneli gizleme kodunu yazdık. if (gizle.checked) Panel1.Visible = false; else Panel1.Visible = true; Bu kodda yapılmak istenilen eğer checkboxımız işaretliyse Panel1.Visible = false; yani panel gizleniyor. Aksi durumda ise panel gözüküyor. 17. UYGULAMA İMAGEBUTTON
Buton kontrolü gibi sunucuya postalama yapan kontroldür. Farkı ise istediğimiz resmi kullanabilmemizdir. Bu kontrol içine bir imagemap tanımlayıp resmin değişik yerlerine tıklayınca değişik işlemler yapılmasını sağlayabilir. Örneğimiz de bununla ilgili İMAGEBUTTON.ASPX <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ımagebutton.aspx.cs" Inherits="WebImageButton.ımagebutton" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <body> <asp:imagebutton ID="ImageButton1" OnClick="ImageButon_Click" runat="server" Height="211px" ImageUrl="~/resim/Penguins.jpg" Width="208px" /> <asp:label ID="Label1" runat="server" Text="X"></asp:Label> <asp:label ID="Label2" runat="server" Text="Y"></asp:Label> <asp:label ID="Label3" runat="server"></asp:label> Burada <asp:imagebutton ID="ImageButton1" OnClick="ImageButon_Click" runat="server" Height="211px" ImageUrl="~/resim/Penguins.jpg" Width="208px" /> Koduyla yapılan işlemler imagebuton_click yordamıyla çalışcağını belirtiyoruz ve solution Explorer den ekledğimiz resmin fiziksel adresini ImageUrl="~/resim/Penguins.jpg" özelliğiyle belirtiyoruz. Labellarda da resim üzerinde nereye basarsak X vey olmak üzere bastığımız yerin koordinatları yazacak. 3.label da ise resmin başlığına mı yok sa başka bir yerine mı bastığımızı ekrana yazdıracak. Bunların kod bölümü ise aspx.cs dosyamızda dır. İMAGEBUTTON.ASPX.CS
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebImageButton public partial class ımagebutton : System.Web.UI.Page protected void ImageButon_Click(object sender, ImageClickEventArgs e) int x = e.x; int y = e.y; Label1.Text = "X:" + x.tostring(); Label2.Text = "Y:" + y.tostring(); if (y >= 47) Label3.Text = "<b> başlığın altını </b>tıkladın"; else Label3.Text = "<b> başlık </b> kısmını tıkladın"; Bu bölümde de resmimizin üstünde herhangi bir yere tıkladığımızda o tıkladığımız yerin koordinatını veren ve başlığa mı yoksa resimemi tıkladığımızı gösteren koddur. X ve Y labellarımızın textleri olarak tanımlanmıştı. Fark ettiysek ImageButon_Click(object sender, ImageClickEventArgs e) yordamında eventargs değilde imageclickeventargs argümanı tanımlanmıştır. Bunun nedeni tıkladığımız kısıma göre işlem yapmasını sağlamasıdır Burada resmin 47 pixellik kısmına tıklandığında bir mesaj, 47 pixellikten daha fazla olan kısma tıklandığında ise başka bir mesaj verecektir. 18. UYGULAMA TABLE, TABLECELL, TABLEROW Programatik olarak tablo oluşturmasını sağlayan kontrollerdir. Herhangi bir HTML tablo tag i yazmadan uygulamamızda tablo oluşturmamızı sağlar. Sunucu bizim belirttiğimiz koşullarda tablo oluşturur ve bunun HTML karşılığını üretir TABLO.ASPX
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Tablo.aspx.cs" Inherits="WebTablo_Yapma.Tablo" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <body> <asp:table ID="Table1" BorderColor="Black" GridLines="Both" CellPadding="5" CellSpacing="1" BorderWidth="2" Font-Names="Verdana" Font- Size="Medium" runat="server"> </asp:table> Tablo Satırları : <asp:listbox ID="Liste1" runat="server"> <asp:listitem Value="1" Selected="True">1</asp:ListItem> <asp:listitem Value="2">2</asp:ListItem> <asp:listitem Value="3">3</asp:ListItem> <asp:listitem Value="4">4</asp:ListItem> </asp:listbox> Tablo Hücreleri : <asp:listbox ID="Liste2" runat="server"> <asp:listitem Value="1" Selected="True">1</asp:ListItem> <asp:listitem Value="2">2</asp:ListItem> <asp:listitem Value="3">3</asp:ListItem> <asp:listitem Value="4">4</asp:ListItem> </asp:listbox> <asp:button ID="Button1" runat="server" Text="Tablo oluştur" /> Burada 2 tane listbox ekliyoruz ve dildeğiiz kadar listitem ekleyebiliyoruz. Tablo satırları ve tablo hücreleri diyerek listboxlarımız önüne text ekliyoruz. Ve tabiî ki bir de buton ekliyoruz bu buton da istediğimiz kadar tablo oluşturmamızı sağlayacaktır. TABLO.ASPX.CS
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebTablo_Yapma public partial class Tablo : System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) int satir_no; int hucre_no; TableRow satir; TableCell hucre; // satir değişkeni tanımlama // hücre değişkeni tanımlama satir_no = int.parse(liste1.selecteditem.value); hucre_no = int.parse(liste2.selecteditem.value); // satir sayısı kadar döndürecek for (int satir_sayisi = 0; satir_sayisi <= satir_no - 1; satir_sayisi++) satir = new TableRow(); // hücre sayısı kadar döndürecek for (int hucre_sayisi = 0; hucre_sayisi <= hucre_no - 1; hucre_sayisi++) hucre = new TableCell(); // hücremin içinde ne yazacak hucre.text = "satır" + satir_sayisi + 1 + ",hücre" + hucre_sayisi +1; ekleme satir.cells.add(hucre); // satirlara hücre Table1.Rows.Add(satir); // tabloma satır ekleme Yukarıdaki kodlarda açıklamalarında ne iş yaptıkları yazmaktadır.
19. UYGULAMA TAKVİM OLUŞTURMA ASP.NET üzerinde tablo oluşturmamızı sağlayan bir kontroldür. Eklemek için sadece toolbox tan calender nesnesi ekliyoruz ve bunun değişik özelliklerini kullanarak görsel açıdan tablomuz üzerinde oynamalar yapabiliyoruz. TAKVİM.ASPX <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Takvim.aspx.cs" Inherits="WebTakvim.Takvim" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <body> <asp:calendar ID="Calendar1" DayNameFormat="Full" runat="server"></asp:calendar> 20. UYGULAMA PLACEHOLDER Bu kontrolümüzde panel kontorlünde olduğu gibi programatik olarak yani sadece program esnasında eklenen kontrolleri sayfada gösterir. PLACEHOLDER.ASPX <%@ Page Language="C#" AutoEventWireup="true" CodeFile="15_PlaceHolder.aspx.cs" Inherits="_06_web_form_elemanlari_15_PlaceHolder" %> <body bgcolor="#daeef3">
<asp:placeholder ID="ph" runat="server" /> Burada sadece placeholder nesnemizi ekleyip ID sine ph diyoruz. PLACEHOLDER.ASPX.CS using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _06_web_form_elemanlari_15_PlaceHolder : System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) ph.controls.add(new LiteralControl("isim: ")); TextBox metinkutusu = new TextBox(); ph.controls.add(metinkutusu); ph.controls.add(new LiteralControl("<p/>")); Button buton = new Button(); buton.text = "gönder"; ph.controls.add(buton); Panel nesnemizdeki aynı kodlar burada da var. Kontrolümüzü oluşturuyoruz ve ph.controls.add(metinkutusu); diyerek placeholderimiza ekliyoruz. Data source kontrolleri Bu kontroller veri kaynaklarından verilerin elde edilmesi ve uygulama tarafından kullanılabilir hale getirilmesi ile ilgili kontrollerdir Tek bir kod yazarak ilgili veri tabanına erişip, ekleme silme, güncelleme işlemleri yapabiliriz. ACCESS DATA SOURCE Access veri tabanımıza erişimimizi, veri elde etmemizi, yönetmemizi sağlayan kontroldür. Accessdatasource kontrolümüzü toolbax tan ekleyerek configure data source kısmına basarak ilgili veri tabanımıza erişebiliriz. Burada dikkat edilmesi gereken nokta ise veritabanımızın solution dosyamızın içinde olmasıdır. <%@ Page Language="C#" %> <html xmlns="http://www.w3.org/1999/xhtml" >
<body> <asp:accessdatasourceid="accessdatasource1"runat="server"datafile="~/app_data/ornek_veritabani_2.m db" SelectCommand="SELECT [ADI], [SOYADI], [SEMT] FROM [SICIL]"> </asp:accessdatasource> <asp:gridview ID="GridView1" Runat="server" DataSourceID="AccessDataSource1"> </asp:gridview> Burada herhangi bir kod yazmıyoruz Access data source ve gridview ekliyoruz. Gridview ı da kullandığımz accesdatasource ile ilişkilendiriyoruz. SelectCommand="SELECT [ADI], [SOYADI], [SEMT] FROM [SICIL]"> Kısmıyla da veri tabanımızdan hangi verilerimizi çekeceğimizi gösteriyoruz. SQL DATASOURCE Sql veri tabanımıza erişimimizi, veri elde etmemizi, yönetmemizi sağlayan kontroldür. sqldatasource kontrolümüzü toolbax tan ekleyerek configure data source kısmına basarak ilgili veri tabanımıza erişebiliriz. Access data source dan farkı veri tabanımızı illa solution dosyamıza atmamıza gerek yoktur. <%@ Page Language="c#" %> <html xmlns="http://www.w3.org/1999/xhtml" > <title>zafer Demirkol ASP.NET Kitap </title> <body> <asp:sqldatasource ID="SqlDataSource1" Runat="server" SelectCommand="SELECT [ADI], [SOYADI], [SEMT] FROM [SICIL]" ConnectionString="<%$ ConnectionStrings:AppConnectionString1 %>"> </asp:sqldatasource> <asp:gridview ID="GridView1" Runat="server" DataSourceID="SqlDataSource1"> </asp:gridview> Görüldüğü gibi kod kısmında herhangi bir değişiklik yok. Access data source ile aynı sadece kontrolümüz farklı. Xml datasource
Xml veri tabanımıza erişimimizi, veri elde etmemizi, yönetmemizi sağlayan kontroldür. xmldatasource kontrolümüzü toolbax tan ekleyerek configure data source kısmına basarak ilgili veri tabanımıza erişebiliriz. <%@ Page Language="c#" %> <html xmlns="http://www.w3.org/1999/xhtml" > <title>asp.net Kitap Zafer Demirkol</title> <body> <asp:xmldatasource ID="XmlDataSource1" Runat="server" DataFile="~/App_Data/turlar.xml"> </asp:xmldatasource> <asp:treeview ID="TreeView1" Runat="server" DataSourceID="XmlDataSource1"> <DataBindings> <asp:treenodebinding DataMember="tur" TextField="bölge" /> <asp:treenodebinding DataMember="tur-adı" TextField="ad" /> <asp:treenodebinding DataMember="güzergah" TextField="güzergah_ad" /> </DataBindings> </asp:treeview> Diğer data source kontrollerimizden farkı gösterimdedir. Gösterimi gridviewle değilde treeviewle yapıyoruz. Bu kontrolü kullanmak içinde tabiî ki elimizde xml data mız olmalı. DATASOURCE KONTROLLERİ Filtre-parametre kullanımı Datasource kontrollümüzden elde ettiğimiz verileri, belirli bir kritere göre filtreleme işlemini yapıyoruz. Bu işlemi yapabilmemiz için ise 2.bir kontrole ihtiyacımız vardır. Bir gridview e yüklenmiş kayıtlardan, sadece belirli kritere uyanlarını elde etmek istediğimizi düşünelim. Bu kriteri de dropdownlist kontrolümüzden seçelim <%@ Page Language="c#" %> <html xmlns="http://www.w3.org/1999/xhtml" > <body bgcolor=silver> <asp:sqldatasource ID="SqlDataSource1" Runat="server" SelectCommand="SELECT [ADI], [SOYADI], [SEMT] FROM [SICIL]" ConnectionString="<%$ ConnectionStrings:AppConnectionString1 %>" filterexpression="semt = '0'" > <FilterParameters> <asp:controlparameter Name="semt_filtresi" ControlID="DropDownList1" PropertyName= "SelectedValue" > </asp:controlparameter>
</FilterParameters> </asp:sqldatasource> <asp:sqldatasource ID="SqlDataSource2" Runat="server" SelectCommand="SELECT DISTINCT [SEMT] FROM [SICIL]" ConnectionString="<%$ ConnectionStrings:AppConnectionString1 %>" /> <asp:dropdownlist ID="DropDownList1" AutoPostBack=true DataSourceID="SqlDataSource2" DataTextField="SEMT" Runat="server"> </asp:dropdownlist> <asp:gridview ID="GridView1" Runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns= "False" Width="798px" Height="265px" SummaryViewColumn="ADI"> <Columns> <asp:boundfield HeaderText="ADI" DataField="ADI" SortExpression="ADI"></asp:BoundField> <asp:boundfield HeaderText="SOYADI" DataField="SOYADI" SortExpression="SOYADI"></asp:BoundField> <asp:boundfield HeaderText="SEMT" DataField="SEMT" SortExpression="SEMT"></asp:BoundField> </Columns> </asp:gridview> Görüldüğü gibi 2 datasource var. Data source gridview kontrolümüzle ilişkilendirilmiş yani veri tabanındaki tüm verilerimizi gridview da göstericek Datasource da dropdownlist kontrolümüzle ilişkilendirildi. Filtreleme işlemini burada gerçekleştiriyoruz <asp:sqldatasource ID="SqlDataSource1" Runat="server" SelectCommand="SELECT [ADI], [SOYADI], [SEMT] FROM [SICIL]" ConnectionString="<%$ ConnectionStrings:AppConnectionString1 %>" filterexpression="semt = '0'" > <FilterParameters> <asp:controlparameter Name="semt_filtresi" ControlID="DropDownList1" PropertyName="SelectedValue" > </asp:controlparameter> </FilterParameters> </asp:sqldatasource> Bu bölümde gördüğümüz üzere, filtre parametresini data source kontrolümüzün içinde tanımlıyoruz. <asp:controlparameter Name="semt_filtresi" ControlID="DropDownList1" PropertyName="SelectedValue" > </asp:controlparameter> Burada filtre işlemini hangi kontrole göre yapacamızı gösteriyoruz ControlID= "DropDownList1" Filtreleme işlemi için kullandığımız data source mız ise: <asp:sqldatasource ID="SqlDataSource2"Runat="server" SelectCommand="SELECT DISTINCT [SEMT] FROM [SICIL]" ConnectionString="<%$ ConnectionStrings: AppConnectionString1 %>" /> Şeklindedir. SelectCommand="SELECT DISTINCT [SEMT] FROM [SICIL]" : kodu ile özellikle distinct ifadesiyle sadece seçtiğimiz sütunları gösteriyoruz yani burada semt kriterine göre filtreleme yapıyoruz İNSERT PARAMETRE veritabanına kayıt eklediğimiz parametremiz. Bütün parametrelerimizi datasource içine yazmamız gerekiyor. <asp:sqldatasource ID="SqlDataSource1" Runat="server"
ConnectionString="<%$ ConnectionStrings:AppConnectionString2 %>" ProviderName="<%$ ConnectionStrings:AppConnectionString2.ProviderName %>" InsertCommand="INSERT INTO [SICIL] ([ADI], [SOYADI], [SEMT]) VALUES (@isim_kriteri, @soyad_kriteri,@semt_kriteri)" SelectCommand="SELECT [ADI], [SOYADI], [SEMT] FROM [SICIL] where SEMT = @semt_filtresi"> <SelectParameters> <asp:controlparameter Name="semt_filtresi" ControlID="DropDownList1" PropertyName="SelectedValue"> </asp:controlparameter> </SelectParameters> <InsertParameters> <asp:controlparameter Name="isim_kriteri" ControlID="TextBox2" PropertyName="Text"> </asp:controlparameter> <asp:controlparameter Name="soyad_kriteri" ControlID="TextBox3" PropertyName="Text"> </asp:controlparameter> <asp:controlparameter Name="semt_kriteri" ControlID="DropDownList1" PropertyName="SelectedValue"> </asp:controlparameter> </InsertParameters> </asp:sqldatasource> Gördüğümüz gibi ekleme yapacağımız kriterlemizi ve neye göre ekleme yapmamız gerektiğini <InsertParameters> </InsertParameters> bloğumuz içerisinde tanımladık. Burada farklı olarak kendimiz bir ekle butonu ekliyoruz ve script bloğumuzun içine ekleme işlemini yapıyoruz <script runat="server"> void ekle(object sender, System.EventArgs e) SqlDataSource1.Insert(); GridView1.DataBind(); </script> Daha sonra da bu ekle yordamımızı butonumuzun içine onclick özelliğiyle ekliyoruz. <%@ Page Language="c#" %> <script runat="server"> void ekle(object sender, System.EventArgs e) SqlDataSource1.Insert(); GridView1.DataBind(); </script> <body bgcolor="#ccffcc"> <asp:sqldatasource ID="SqlDataSource1" Runat="server" ConnectionString="<%$ ConnectionStrings:AppConnectionString2 %>" ProviderName="<%$ ConnectionStrings:AppConnectionString2.ProviderName %>" InsertCommand="INSERT INTO [SICIL] ([ADI], [SOYADI], [SEMT]) VALUES (@isim_kriteri, @soyad_kriteri, @semt_kriteri)" SelectCommand="SELECT [ADI], [SOYADI], [SEMT] FROM [SICIL] where SEMT = @semt_filtresi"> <SelectParameters> <asp:controlparameter Name="semt_filtresi" ControlID="DropDownList1" PropertyName="SelectedValue"> </asp:controlparameter>
</SelectParameters> <InsertParameters> <asp:controlparameter Name="isim_kriteri" ControlID="TextBox2" PropertyName="Text"> </asp:controlparameter> <asp:controlparameter Name="soyad_kriteri" ControlID="TextBox3" PropertyName="Text"> </asp:controlparameter> <asp:controlparameter Name="semt_kriteri" ControlID="DropDownList1" PropertyName="SelectedValue"> </asp:controlparameter> </InsertParameters> </asp:sqldatasource> <asp:sqldatasource ID="SqlDataSource3" Runat="server" SelectCommand="SELECT DISTINCT [SEMT] FROM [SICIL]"ConnectionString="<%$ ConnectionStrings:AppConnectionString2 %>" ProviderName="<%$ ConnectionStrings:AppConnectionString2.ProviderName %>" />Semt: asp:dropdownlist ID="DropDownList1" AutoPostBack="true" DataSourceID="SqlDataSource3" DataTextField="SEMT" Runat="server"></asp:DropDownList> Ad: <asp:textbox ID="TextBox2" Runat="server"></asp:TextBox> Soyad: <asp:textbox ID="TextBox3" Runat="server"></asp:TextBox> <asp:gridview ID="GridView1" Runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="False" Width="614px" Height="133px"> <Columns> <asp:boundfield HeaderText="ADI" DataField="ADI" SortExpression="ADI"></asp:BoundField> <asp:boundfield HeaderText="SOYADI" DataField="SOYADI" SortExpression="SOYADI"></asp:BoundField> <asp:boundfield HeaderText="SEMT" DataField="SEMT" SortExpression="SEMT"></asp:BoundField> </Columns> </asp:gridview> <asp:button ID="Button1" Runat="server" Text="Ekle" OnClick="ekle" /> DELETE, UPDATE PARAMETRESİ Buradaki örneğe bakarsak daha önce yaptıklarımızın aynısını yapıyoruz Kontrollerimizi ekliyoruz. Datasource larımızı kontrollerimizle eşleştiriyoruz. Ekle, sil, güncelle diye 3 tane buton ekleyip script bloğumuzda yazdığımız yordamları onclick özelliğiyle butonlarımıza ekliyoruz. <%@ Page Language="c#" %> <script runat="server"> void ekle(object sender, System.EventArgs e) SqlDataSource1.Insert(); GridView1.DataBind(); void Guncelle(object sender, System.EventArgs e) SqlDataSource1.Update(); GridView1.DataBind(); void sil(object sender, System.EventArgs e) SqlDataSource1.Delete(); GridView1.DataBind();
</script> <title>zafer Demirkol - ASP.NET Kitap</title> <body bgcolor="#ccffcc"> <asp:sqldatasource ID="SqlDataSource1" Runat="server" ConnectionString="<%$ ConnectionStrings:AppConnectionString2 %>" ProviderName="<%$ ConnectionStrings:AppConnectionString2.ProviderName %>" InsertCommand="INSERT INTO [SICIL] ([ADI], [SOYADI], [SEMT]) VALUES (@isim_kriteri, @soyad_kriteri, @semt_kriteri)" SelectCommand="SELECT [ADI], [SOYADI], [SEMT] FROM [SICIL] where SEMT = @semt_filtresi" UpdateCommand="UPDATE [SICIL] SET [ADI] = @isim_kriteri, [SOYADI] = @soyad_kriteri,[semt] = @semt_kriteri WHERE [SOYADI] = @soyad_kriteri AND [SEMT] = @semt_kriteri" DeleteCommand="DELETE FROM [SICIL] WHERE [ADI] = @isim_kriteri AND [SOYADI] = @soyad_kriteri AND [SEMT] = @semt_kriteri"> <SelectParameters> <asp:controlparameter Name="semt_filtresi" ControlID="DropDownList1" PropertyName="SelectedValue"></asp:ControlParameter> </SelectParameters> <InsertParameters> <asp:controlparameter Name="isim_kriteri" ControlID="TextBox2" PropertyName="Text"> </asp:controlparameter> <asp:controlparameter Name="soyad_kriteri" ControlID="TextBox3" PropertyName="Text"> </asp:controlparameter> <asp:controlparameter Name="semt_kriteri" ControlID="DropDownList1" PropertyName="SelectedValue"> </asp:controlparameter> </InsertParameters> <UpdateParameters> <asp:controlparameter Name="isim_kriteri" ControlID="TextBox2" PropertyName="Text"> </asp:controlparameter> <asp:controlparameter Name="soyad_kriteri" ControlID="TextBox3" PropertyName="Text"> </asp:controlparameter> <asp:controlparameter Name="semt_kriteri" ControlID="DropDownList1" PropertyName="SelectedValue"> </asp:controlparameter> </UpdateParameters> <DeleteParameters> <asp:controlparameter Name="isim_kriteri" ControlID="TextBox2" PropertyName="Text"> </asp:controlparameter> <asp:controlparameter Name="soyad_kriteri" ControlID="TextBox3" PropertyName="Text"> </asp:controlparameter> <asp:controlparameter Name="semt_kriteri" ControlID="DropDownList1" PropertyName="SelectedValue"> </asp:controlparameter> </DeleteParameters> </asp:sqldatasource> <asp:sqldatasource ID="SqlDataSource3" Runat="server" SelectCommand="SELECT DISTINCT [SEMT] FROM [SICIL]" ConnectionString="<%$ ConnectionStrings:AppConnectionString2 %>" ProviderName="<%$ ConnectionStrings:AppConnectionString2.ProviderName %>" />Semt: asp:dropdownlist ID="DropDownList1" AutoPostBack="true" DataSourceID="SqlDataSource3" DataTextField="SEMT" Runat="server">
</asp:dropdownlist> Ad: <asp:textbox ID="TextBox2" Runat="server"></asp:TextBox> Soyad: <asp:textbox ID="TextBox3" Runat="server"></asp:TextBox> <asp:gridview ID="GridView1" Runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="False" Width="614px" Height="133px" > <Columns> <asp:boundfield HeaderText="ADI" DataField="ADI" SortExpression="ADI"></asp:BoundField> <asp:boundfield HeaderText="SOYADI" DataField="SOYADI" SortExpression="SOYADI"></asp:BoundField> <asp:boundfield HeaderText="SEMT" DataField="SEMT" SortExpression="SEMT"></asp:BoundField> </Columns> </asp:gridview> <asp:button ID="Button1" Runat="server" Text="Ekle" OnClick="ekle" /> <asp:button ID="Button2" Runat="server" Text="Güncelle" OnClick="Guncelle" /> <asp:button ID="Button3" Runat="server" Text="Sil" OnClick="sil" /> Delete ve update kısımlarını gridview dan edit columns menüsüne tıklayarak ta enable editing, enable updating kısımlarını kullanarak ekleyebildiğimizi söyleyelim DATA SOURCE OLAYLARI Eklediğimiz verileri güncellerken yada düzenlerken bize uyarı yada mesaj vermesini istiyorsak gridview üzerindeki olayları kullanmamız gerekecek Aşağıdaki örnekte daha önce yaptığımız, ekleme, silme, güncelleme işlemlerine ek olarak yapacağımız düzenleme sırasında bize uyarı verecek kısımları belirteceğiz. Bunun için satırların güncellendiğini göstermemiz için 2 adet label tanımlıyoruz Bunlar, güncelleniyor, güncellendi olarak tanımlanacak ve script bloğumuz içerisinde bu mesajların nasıl verileceğini göstereceğiz. <script runat="server"> void guncelleniyor(object osender, SqlDataSourceCommandEventArgs e) lbl_guncelleniyor.text = "Güncelleme komutu : " + e.command.commandtext; void guncellendi(object osender, SqlDataSourceStatusEventArgs e) lbl_guncellendi.text = e.affectedrows.tostring() + " satır güncellendi. <br>"; </script> Bu tanımladığımız yordamları da onupdating ve onupdatede olarak ister datasource ister de gridview kontrollerimizin içine yazarak gösterebiliriz. <%@ Page Language="c#" AutoEventWireup="false" %> <script runat="server"> void guncelleniyor(object osender, SqlDataSourceCommandEventArgs e) lbl_guncelleniyor.text = "Güncelleme komutu : " + e.command.commandtext; void guncellendi(object osender, SqlDataSourceStatusEventArgs e)
lbl_guncellendi.text = e.affectedrows.tostring() + " satır güncellendi. <br>"; </script> <head> <body bgcolor="#ccffcc"> <asp:sqldatasource ID="SqlDataSource1" Runat="server" SelectCommand="SELECT * FROM sicil" UpdateCommand="UPDATE [SICIL] SET [ADI] = @ADI, [SOYADI] = @SOYADI, [SEMT] = @SEMT WHERE [SICIL_ID] = @SICIL_ID" DeleteCommand="DELETE FROM SICIL WHERE (SICIL_ID = @original_sicil_id)" ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\dokumanlar\ asp_net_3_5\asp_net_3_5_kitap\kitap_kodlari\app_data\ornek_veritabani_2.mdb;persist Security Info=False" ProviderName="System.Data.OleDb" OnUpdating="guncelleniyor" OnUpdated="guncellendi" > <UpdateParameters> <asp:parameter Name="ADI"></asp:Parameter> <asp:parameter Name="SOYADI"></asp:Parameter> <asp:parameter Name="SEMT"></asp:Parameter> <asp:parameter Name="SICIL_ID"></asp:Parameter> </UpdateParameters> </asp:sqldatasource> <asp:label ID="lbl_duzenle" Runat="server"></asp:Label> <asp:label ID="lbl_guncelleniyor" Runat="server"></asp:Label> <asp:label ID="lbl_guncellendi" Runat="server"></asp:Label> <asp:gridview ID="GridView1" Runat="server" DataSourceID="SqlDataSource1" DataKeyNames="SICIL_ID" BackColor="#C0C0FF" Font-Names="Verdana" Font-Size="X-Small" AllowSorting="True" AllowPaging="True" PageSize="20" AutoGenerateColumns="False" olternatingrowstyle- BackColor="Lavender"> <Columns> <asp:commandfield ShowDeleteButton="True" ShowEditButton="True" EditText="düzenle" CancelText="Vazgeç" UpdateText="Güncelle" DeleteText="Sil"></asp:CommandField> <asp:boundfield ReadOnly="True" HeaderText="SICIL_ID" DataField="SICIL_ID" SortExpression="SICIL_ID"></asp:BoundField> <asp:boundfield DataField="ADI" SortExpression="ADI" HeaderText="ADI" /> <asp:boundfield HeaderText="SOYADI" DataField="SOYADI" SortExpression="SOYADI"></asp:BoundField> <asp:boundfield HeaderText="SEMT" DataField="SEMT" SortExpression="SEMT"></asp:BoundField> </Columns> </asp:gridview> Detailsview Temel kullanım alanı gridviewdakı her bir satırı ayrıca göstermektir. Bunun için gridview ile birlikte kullanılır. <%@ Page Language="c#" %> <script runat="server"> </script>
<body> <asp:detailsview ID="DetailsView1" Runat="server" Width="190px" Height="249px" DataSourceID="SqlDataSource1" AutoGenerateRows="False" Font-Names="Verdana" Font-Size="Smaller" AllowPaging="True"> <RowStyle BackColor="#FFC0FF"></RowStyle> <Fields> <asp:boundfield HeaderText="SICIL_ID" InsertVisible="False" DataField="SICIL_ID" SortExpression="SICIL_ID"></asp:BoundField> <asp:boundfield HeaderText="ADI" DataField="ADI" SortExpression="ADI"></asp:BoundField> <asp:boundfield HeaderText="SOYADI" DataField="SOYADI" SortExpression="SOYADI"></asp:BoundField> <asp:boundfield HeaderText="GIRIS_TARIHI" DataField="GIRIS_TARIHI" SortExpression="GIRIS_TARIHI"></asp:BoundField> <asp:boundfield HeaderText="CIKIS_TARIHI" DataField="CIKIS_TARIHI" SortExpression="CIKIS_TARIHI"></asp:BoundField> <asp:boundfield HeaderText="DEPARTMAN" DataField="DEPARTMAN" SortExpression="DEPARTMAN"> </asp:boundfield> <asp:boundfield HeaderText="SEMT" DataField="SEMT" SortExpression="SEMT"></asp:BoundField> </Fields> <HeaderStyle BackColor="#C0FFC0"></HeaderStyle> <AlternatingRowStyle BackColor="#C0C0FF"></AlternatingRowStyle> </asp:detailsview> <asp:sqldatasource ID="SqlDataSource1" Runat="server" SelectCommand="SELECT * FROM [SICIL]" ConnectionString="<%$ ConnectionStrings:AppConnectionString2 %>" ProviderName="<%$ ConnectionStrings:AppConnectionString2.ProviderName %>"> </asp:sqldatasource> Detailsview tek başına, veri kaynağındaki her bir kaydı, belirlediğimiz alanlar ile gösterir. MASTERPAGE (MASTER SAYFALAR) Web sitesinde Site boyunca kullanılan alanlar ve site boyunca değişen alanlar vardır. Master sayfalar sitenin bütün sayfalarınca kullanılan bölümlerdir. Master page lerde menü eklemek, düzenlemek vb.. işlmeler için sitemaster bölümünü kullanıyoruz. Ayrıca login.aspx. register aspx. Default aspx. About aspx. Bölümleri yeni bir website açtığımız zaman otomatik olarak geliyor. Bunların üzerinde değişiklikler yapabiliyoruz. Yeni bir menü eklemek istediğimiz zaman toolbox tan navigation bölümünden menu kontrolünü ekleyerek master page içinde menülerimizi oluşturabiliriz. Her sayfa içeriği için farklı asp sayfaları kullanabiliriz. Kullanabilmek için menülerimiz ile asp sayfalarımızı ilişkilendirmeliyiz. Bunun için sitemaster içinde menüler kısmında edit bölümünü kullanıyoruz.
Sitemizin kullandığı tasarım ise css dosyamızdır. Bu tasarımı değiştirmek için ya css dosyamızı değiştirmemiz gerekir. Bunu ya kendiniz yazabilirsiniz ya da hazır kalıp olarak indirebilirsiniz. Yeni css dosyamızı sitemize uygulamak içinde <link href="~/styles/site.css" rel="stylesheet" type="text/css" /> <asp:contentplaceholder ID="HeadContent" runat="server"> </asp:contentplaceholder> Bölümünden değişiklik yapmamız gerekir. Sayfamıza resim eklemek istediğimiz de ise image kontrolümüzü kullanıyoruz. <asp:image ID="Image1" AlternateText="Derin Demirkol" Runat="server" ImageUrl="~/06_Navigation/resimler/agustos/Picture 014.jpg" /></asp:content> Üye kaydı Bir siteye üye kaydı yapalım <%@ Page Language="c#" %> <script runat="server"> void Button1_Click(object sender, System.EventArgs e) Membership.CreateUser(TextBox1.Text, TextBox2.Text); Label1.Text = TextBox1.Text + " kullanıcısı başarıyla oluşturuldu."; </script> <title>zafer Demirkol ASP.NET Kitap</title> <body bgcolor="#ffffcc"> <h1> Kullanıcı Oluştur</h1> <p> Kullanıcı ismi: <asp:textbox ID="TextBox1" runat="server"></asp:textbox> </p> <p> Password: <asp:textbox ID="TextBox2" runat="server" TextMode="Password"></asp:TextBox> </p> <p> <asp:button ID="Button1" runat="server" Text="Kullanıcı Oluştur" OnClick="Button1_Click" /> </p> <p> <asp:label ID="Label1" runat="server"></asp:label> </p>
Kodu incelersek 2 adet textbox ve 1 tane de butonumuz var. Butona bastığımız da textbox a girilen kullanıcı adı ve şifreyle birlikte kullanıcı adı oluşturacak void Button1_Click(object sender, System.EventArgs e) Membership.CreateUser(TextBox1.Text, TextBox2.Text); Label1.Text = TextBox1.Text + " kullanıcısı başarıyla oluşturuldu."; Bölümüyle kullanıcı oluşturma bölümümüzü yazıyoruz. Oluşturulan kullanıcı da website dosyamızın içinde kendiliğinden var olan sql veritabanına kaydoluyor. Kullanıcı oluştur sihirbazı Az önce yukarıda elle yaptığımız işlemleri toolbaz tan create user wizard kontrolü ekleyerek te otomatik olarak yapabiliyoruz. <%@ Page Language="c#" %> <script runat="server"> </script> <html> <head id="head1" runat="server"> <title>zafer Demirkol ASP.NET Kitap</title> <body> <asp:createuserwizard ID="CreateUserWizard1" runat="server" AnswerLabelText="Gizli Cevap:" CompleteSuccessText="Hesabın Başarıyla oluşturuldu." ConfirmPasswordCompareErrorMessage="İki password farklı." ConfirmPasswordLabelText="Password Tekrar:" DuplicateEmailErrorMessage="Lütfen farklı bir email adresi girin." DuplicateUserNameErrorMessage="Lütfen farklı bir kullanıcı ismi girin." QuestionLabelText="Gizli soru:" UserNameLabelText="Kullanıcı İsmi:" BackColor="#FFFFC0" ContinueButtonText="Devam" CreateUserButtonText="Kullanıcı Oluştur" Font-Names="Verdana" Font-Size="Smaller" InstructionText="Yeni Hesap Oluştur" > <WizardSteps> <asp:createuserwizardstep runat="server"> </asp:createuserwizardstep> <asp:completewizardstep runat="server"> </asp:completewizardstep> </WizardSteps> </asp:createuserwizard> <asp:label ID="lblSonuc" ForeColor=Red Font-Bold=true runat="server" Visible="false">Sonuçlar:</asp:Label>
Kullanıcılara izin verme-sınırlama Bir siteye kimin ulaşıp ulaşamayacağımı web.config dosyamızda yapacağımız ayarlarla belirleyebiliriz. Bunu bir forumda bir şey ararken bunu görebilmek için üye olmanız gerekir kısmı gibi düşünebilirsiniz. Burası bizi direkt olarak login ekranına yönlendiriyordu. Bizim burada yaptığımız işlemde aynen böyle. Bunun için deny(engelle) ve allow(izin ver) ifadeleri kullanıyoruz ve * ve? değerleri veriyoruz. * işareti bütün kullanıcıları temsil eder? işareti ise kimliği tanımlanmamış (anonim) kullanıcıları temsil eder Bu işlemleri web.config dosyamız içinde <authentication mode="forms"> <forms loginurl="~/account/login.aspx" timeout="2880" /> </authentication> <authorization> <deny users="?"/> </authorization> Şeklinde yapıyoruz. Burada demek istediğimiz ise anonim kullanıcı bir sayfaya ulaşmaya çalıştığından onu engelle ve login sayfasına yönlendir. Kullanıcı sil Kullanıcı ekle de yaptığımız gibi text box ve buton eklicez. Ve burada login yapmış kullanıcımızı silmesini isticez. <%@ Page Language="c#" %> <script runat="server"> void Kullanici_sil_Click(object sender, System.EventArgs e) if ((Membership.DeleteUser(User.Identity.Name))) FormsAuthentication.SignOut(); Roles.DeleteCookie(); Response.Redirect("~/09_guvenlik_uye_yonetimi/kullanici_olustur_sihirbaz.aspx"); else sonuc_lbl.visible = true; sonuc_lbl.text = "Kullanıcı silinemedi."; </script> <html > <head id="head1" runat="server"> <title>zafer Demirkol ASP.NET Kitap</title> <body> <asp:button ID="Kullancici_sil" Runat="server"Text="Tanımlı kullanıcıyı sil."onclick="kullanici_sil_click" /> <asp:label id="sonuc_lbl" Runat=Server Visible=false BackColor=Red /> Şu an sistemdeki kullanıcıyı sil.
Kullanıcı silindikten sonra, yeni kullanıcı oluşturma sayfasına yönlenir.. Silme işlemi void Kullanici_sil_Click(object sender, System.EventArgs e) if ((Membership.DeleteUser(User.Identity.Name))) FormsAuthentication.SignOut(); Roles.DeleteCookie(); Response.Redirect("~/09_guvenlik_uye_yonetimi/kullanici_olustur_sihirbaz.aspx"); else sonuc_lbl.visible = true; sonuc_lbl.text = "Kullanıcı silinemedi."; Şeklindedir. Sildiğimiz kullanıcıdan tüm yetki ve özelliklerini aldığımızı belirtiyoruz yukardaki kodumuzda. ONLİNE KULLANICI SAYISI Online kişi için de membership metodundan yaralanıcaz. <%@ Page Language="c#" %> <script runat="server"> void Page_Load(object sender, System.EventArgs e) Label1.Text = Membership.GetNumberOfUsersOnline().ToString(); </script> <html> <head id="head1" runat="server"> <title>zafer Demirkol ASP.NET Kitap</title> <body> <asp:loginstatus ID="LoginStatus1" runat="server" /> <p> <asp:loginname ID="LoginName1" runat="server" Font-Bold="True" Font-Size="XX-Large" /> </p> <p> <asp:label ID="Label1" runat="server" Text="0" /> Kullanıcı online.</p> Gördüğümüz gibi online kullanıcı sayısını bulmak için void Page_Load(object sender, System.EventArgs e) Label1.Text = Membership.GetNumberOfUsersOnline().ToString(); ROL EKLEME KALDIRMA Bir kullanıcı ekledikten sonra bunun admin mi, kullanıcı mi vb özellikleri ekleme işlemi rol eklemedir.
<%@ Page Language="c#" %> <script runat="server"> void Page_Load(object sender, System.EventArgs e) void Rol_Ekle_Click(object sender, System.EventArgs e) Roles.CreateRole(TextBox1.Text); ListBoxYukle(); void ListBoxYukle() roller_lstbx.datasource = Roles.GetAllRoles(); roller_lstbx.databind(); protected void Rol_Sil_Click(object sender, System.EventArgs e) if ((roller_lstbx.selectedindex!= -1)) Roles.DeleteRole(roller_lstbx.SelectedValue); ListBoxYukle(); </script> <title>zafer Demirkol ASP.NET Kitap</title> <body bgcolor="#ccff99"> <h1> Rol Yönetimi</h1> Rol Ekle: <asp:textbox ID="TextBox1" runat="server"></asp:textbox> <p> <asp:button ID="Button1" runat="server" Text="Rol Ekle" OnClick="Rol_Ekle_Click" /> <asp:button ID="Button2" runat="server" OnClick="Rol_Sil_Click" Text="Rol Sil" /></p> rol tanımı: <asp:listbox ID="roller_lstbx" runat="server"></asp:listbox> Rol ekleme işlemi için void Rol_Ekle_Click(object sender, System.EventArgs e) Roles.CreateRole(TextBox1.Text); ListBoxYukle(); Rol silmek için ise protected void Rol_Sil_Click(object sender, System.EventArgs e) if ((roller_lstbx.selectedindex!= -1)) Roles.DeleteRole(roller_lstbx.SelectedValue);
Bu kadar basit. KULLANICIYA ROL ATAMAK 2 türlü olur ya view visual studio da build menüsü altında configration manager ile sitemizin admin paneline ulaşıp buradan security bölümünden bu işlemi yaparız. Ya da: Script bloğumuzun içine <script runat="server"> string[] rollerdizisi; MembershipUserCollection kullanicilar; public void Page_Load() if (!(IsPostBack)) rollerdizisi = Roles.GetAllRoles(); roller_lbx.datasource = rollerdizisi; roller_lbx.databind(); kullanicilar = Membership.GetAllUsers(); kullanici_lbx.datasource = kullanicilar; kullanici_lbx.databind(); public void kullanici_ekle_click(object sender, EventArgs args) if (kullanici_lbx.selecteditem == null) mesajlar.text = "Lütfen bir veya daha fazla kullanıcı seçiniz."; return; int[] rol_indeksleri = roller_lbx.getselectedindices(); if (rol_indeksleri.length == 0) mesajlar.text = "Lütfen bir veya daha fazla rol seçiniz."; return; string[] rollerlistesi = new string[rol_indeksleri.length - 1]; for (int a = 0; a <= rollerlistesi.length - 1; a++) rollerlistesi[a] = roller_lbx.items[rol_indeksleri[a]].value; try Roles.AddUserToRoles(kullanici_lbx.SelectedItem.Value, rollerlistesi); mesajlar.text = kullanici_lbx.selecteditem.value.tostring() + " kullanıcısına seçilen rol(ler) eklendi."; catch (HttpException e) mesajlar.text = e.message; Bundan sonraki bölümler de ise vize öncesi öğrendiğimiz kontrolleri master page üzerinde ekleme kısımları var. Hem vize öncesi hemde vize sonrası bunları gördüğümüz ve derste de uyguladığımız için bunları anlatymaya gerek duymadım Hepinize iyi çalışmalar ve sınavlarınızda da başarılar dilerim SAYGILARIMLA EGEMEN TEKKANAT