İÇİNDEKİLER VII İÇİNDEKİLER 1 TEMEL BİLGİLER 1.Net Framework Nedir? 1.Net Bileşenleri 1 CLR (Common Language Runtime - Ortak Dil Çalışma Platformu) 3 MSIL (Microsoft Intermadiate Language - Ara Dil) 3 JIT (Just in Time - Çalışma Anında Derleme) 4 EconoJIT (Ekonomik JIT) 4 Normal JIT 4 PreJIT 4 Base Class Library (Temel Sınıf Kütüphanesi) ve Namespace (İsim Alanı) Kavramları 5 System 5 System.IO 6 System.Linq 6 System.Net 6 System.Security 6.Net Framework 4.5.1 6 Asp.Net MVC Nedir? 7 MVC Pattern Nedir? 7 Model 7 View 7 Controller 8 Asp.Net MVC nin Çalışma Prensibi 8 MVC nin Avantajları ve Dezavantajları 11 Neden Asp.Net Web Forms? 11 Neden Asp.Net MVC? 12 Karşılaştırma Sonucu 14 2 ASP.NET MVC İLE YAZILIM GELİŞTİRME 15 Asp.Net MVC ye Başlarken 15 Visual Studio 2013 e Genel Bakış 16 Visual Studio 2013 17 Asp.Net MVC ile Yeni Proje Oluşturma 18 Asp.Net MVC Projesi Oluşturma 20
VIII ASP.NET MVC 5 Visual Studio 2013 Çalışma Ortamı 22 Araç Kutusu (Toolbox) 22 Sekmeler (Tabs) 23 Tarayıcı (Browser) 23 HTML Kodları 23 Dizin Gezgini (Solution Explorer) 24 Ekip Gezgini (Team Explorer) 24 Durum Çubuğu 24 Özellikler (Properties) 24 Visual Studio 2013 te Projeyi Çalıştırma 24 Run (Internet Explorer) 24 F5 Tuşu 24 Model, View, Controller Kullanımı 26 Controller Oluşturma 26 Model Oluşturma 28 View Oluşturma 29 3 ASP.NET MVC İLE C# KULLANIMI 33 C# Nedir? 33 Neden C# Kullanmalıyız? 33 Öğrenim Kolaylığı 33 Yazılım Geliştirme Sürecindeki Avantajları 34 XML ve Json Desteği 34 Asp.Net MVC ile Proje Geliştirilirken Kullanılan Diller 35 Asp.Net MVC ile HTML Kullanımı 35 Asp.Net MVC ile Javascript Kullanımı 35 Asp.Net MVC ile C# Kullanımı 36 Asp.Net MVC Kodlama Yöntemleri 37 View Engine Nedir? 37 Razor View Engine 37 @ Operatörü 38 Açıklama Satırı 38 Genel Kodlama 40 Değişken Değerini Sayfaya Yazdırma 42 Sayfaya Boşluk Yazdırma 43 Sayfaya HTML Kodu Yazdırma 46
İÇİNDEKİLER IX Kontrol Yapıları (If, Switch) ve Döngülerin (While, For, Do-While, Foreach) Kullanımı 49 1. Genel Kod Bloğunun İçinde Kullanımı 49 2. Kontrol Yapıları ve Döngülere Özel Kodlama 51 Asp.Net MVC de En Sık Kullanılan C# Kodları 52 Link Oluşturma 52 Post İşlemi IsPost Kullanımı 56 HTML Karakter Kodlamasını Tanımlama (HttpUtility) 58 HtmlEncode ve HtmlDecode Kullanım Örnekleri 58 View İçerisinde Metin Formatlama İşlemleri (String.Format) 60 Sayıları Farklı Formatlarda Görüntüleme 60 Tarihi (Date) Farklı Formatlarda Görüntüleme 61 Dosya ve Klasörlere Erişim (Server.MapPath) 67 Dosyanın Sanal Yoluna (Virtual Path) Erişim (Href) 70 Sayfaya HTML Kodu Yazdırma (Html.Raw) 73 Uyarı Mesajı Penceresi Oluşturma (Javascript - Alert) 74 Uyarı Mesajı Penceresi Sonrası 76 Otomatik Sayfa Yönlendirme 76 4 VIEW 81 View Kullanımı 81 Dizin Yapısı 82 Asp.Net MVC View Tasarımı 83 Controller - View İlişkisi 84 Controller dan View a Ulaşım 85 View dan Controller a Ulaşım 86 View Oluşturma 87 Controller Üzerinden View Oluşturma 87 Views Klasörüne View Ekleme 90 Action dan Farklı İsimde View Çağırma 92 Layout (Şablon Sayfa) Kullanımı 93 Layout Oluşturma 94 İç İçe (Nested) Layout Oluşturma 102 Layout İçinde Bölüm (Section) Tanımlama (RenderSection) 107 Parçalı (Partial) View Kavramı ve Kullanımı 115 Partial View Oluşturma 116
X ASP.NET MVC 5 Partial View ın View larda Kullanımı 117 ViewStart Kavramı 119 Controller dan View a Veri Gönderme (ViewData & ViewBag) 123 ViewData 124 VıewBag 126 Asp.Net MVC ile CSS Kullanımı ve Style Sheet Dosyaları 128 CSS Nedir? 128 En Çok Kullanılan CSS Kodları 129 Genişlik Tanımlama (Width) 129 Yükseklik Tanımlama (Height) 129 Yazı Tipi Tanımlama (Font-Family) 129 Yazı Büyüklüğünü Tanımlama (Font-Sıze) 130 Yazı Kalınlığını Tanımlama (Font-Weight) 130 Yazı Eğikliğini Tanımlama (Font-Style) 130 Yazı Rengi Tanımlama (Color) 131 Yazı Hizalama (Text-Alıgn) 131 Arkaplan Rengi Tanımlama (Background-Color) 131 Asp.Net MVC de CSS Kullanımı 132 HTML Nesnesine CSS Tanımlama 132 CSS Sınıfı Oluşturma ve HTML Nesnesine CSS Sınıfını Tanımlama 134 5 MODEL 139 Model Kullanımı 139 Model Tanımlama 140 Kayıt Listeleme 143 Yeni Kayıt Oluşturma 148 Kayıt Düzenleme 154 Kayıt Silme 161 Kayıt Görüntüleme 165 Model Nitelikleri (Attributes) 169 Zorunluluk Kontrolü (Required) 169 Başlık Tanımlaması (DisplayName) 172 Özelliğin Düzenlenebilirliği (Editable) 173 Görüntüleme Formatı (DisplayFormat) 175 Veri Türünün Kontrolü (DataType) 177 (EmailAddress) 179
İÇİNDEKİLER XI Metin Uzunluğu Kontrolleri (MaxLength, MinLength) 180 Değerleri Karşılaştırma (Compare) 182 Model Binding 184 Model Binding Nedir? 184 Varsayılan Model Binder Yapılandırması 184 Kullanıcı Tanımlı (Custom) Model Binder Oluşturma 187 Action Metod İçinde Custom Model 189 Binder Kullanımı 189 Entity Framework 191 ORM Kavramı 191 ORM ile Neler Yapılabilir? 192 ORM Veritabanı Bağımsız Nasıl Çalışıyor? 192 ORM nin Avantajları Nelerdir? 193 ORM İle Veritabanı Modelleme Zorunlu mu? 194 ORM de Mapping Nedir? 194 Entity Framework Nedir? 194 Entity Framework Veri Modeli Oluşturma 196 Entity Framework Veritabanı İçeriği (Data Context) Oluşturma 198 Veritabanı Bağlantı Parametrelerini Tanımlama 200 Entıty Framework ile MVC Controller ve View ları Oluşturma 202 Veritabanı Oluşurken Tablolara Başlangıç Kayıtları Ekleme 204 Entity Framework ile Kayıt İşlemleri 207 Tablodaki Tüm Kayıtları Sorgulama (Select) 208 Kritere Göre Sorgulama (Where) 212 Kategorideki Ürünleri Sorgulama 212 Ürün Detayını Sorgulama 215 Tabloya Kayıt Ekleme (Insert) 217 Tabloya Ürün Ekleme 217 Kategoriye Ürün Ekleme 221 Tablodaki Kaydı Güncelleme (Update) 225 Tablodan Kayıt Silme (Delete) 229 6 CONTROLLER 233 Controller Kullanımı 233 Kullanım Örnekleri 234 Action Kullanımı 235
XII ASP.NET MVC 5 Action Nedir? 236 Action Result Kullanımı 236 Sayfa Yönlendirme (RedirectResult) 238 Json Sonucu Döndürme (JsonResult) 240 Dosya Döndürme (fileresult) 243 Farklı Bir Action Metoda Yönlendirme (RedirectToRouteResult) 244 Partial View Döndürme (PartialViewResult) 245 Javascript Döndürme (JavascriptResult) 252 Action ve Model Attributes (Nitelikler) 255 ActionName (Action İsmi) 255 HttpPost (View dan Controller a Veri Gönderme) 257 HttpGet (Site İçinde Arama Yapma) 261 Bind (View dan Alınacak Verilerin Kontrolü) 265 OutputCache (Önbellekleme) 267 RequireHttps (Https Protokolünü Zorunlu Kılma) 270 Asenkron İşlemler 272 Asenkron Controller Sınıfları (AsyncController) 273 Asenkron Action Metodlar 276 7 WEB API 279 API Nedir? 279 Web API Nedir? 280 Kullanım Alanları 280 Web API Uygulaması Oluşturma 281 Örnek Uygulama (Tüm Kayıtları Listeleme) 284 Parametre Yönetimi (Id ye Göre Kayıt Getirme) 287 Geri Dönüş Değerlerinin Yönetimi (IHttpActionResult Kullanımı) 290 Ok (İşlem Başarıyla Tamamlanma Durumu) 290 Not Found (Alınmak İstenen Verinin Bulunamaması Durumu) 291 Unauthorized (Kullanıcının İşlem Yetkisinin Olmaması Durumu) 292 Conflict (Aynı Veriyi İki Kere Kaydetme Durumu) 294 8 ROUTING (YÖNLENDİRME) 299 Routıng Nedir? 299 Varsayılan Route Yapılandırması 300 Route Oluşturma (Haber Sitesinin Route Ayarları) 302
İÇİNDEKİLER XIII Anasayfa ya Özel Route Oluşturma (Anasayfa) 305 Kategori Sayfalarına Özel Route 306 Oluşturma (kategori/kategoriadı) 306 Haber Sayfalarına Özel Route Oluşturma (haber/kategoriler/ /HaberAdı) 314 Route Constraints (Rota Kısıtlamaları) 319 Regular Expressions (Düzenli İfadeler) ile Rota Kısıtlama 319 Regular Expression Nedir? 319 Regular Expression Deseni Oluşturma 319 Regular Expression ile Cep Telefonu Deseni Oluşturma 320 Regular Expression ile Rota Kısıtlama İşlemi 321 HttpMetodConstraint ile Rota Kısıtlama 322 Kullanıcı Tanımlı (Custom) Rota Kısıtı Oluşturma (IRouteConstraınt) 323 Web API Route Yapılandırması 326 Convention Based Routing 327 Web API de ControllerAdı/ActionAdı/Parametre Route Yapılandırması 328 Attribute Based Routing 331 Action a Route Tanımlama 331 ApiController a Route Tanımlama 335 9 FILTERS (FILTRELER) 337 Filtreleme Nedir? 337 Filtre Çeşitleri 338 Action Filter 338 Action a ActionFilter Tanımlama 339 Controller a ActionFilter Tanımlama 343 Result Filter 345 Exception Filter (Hata Filtresi) 350 Uygulama Bazında Hata Yakalama 352 Türüne Göre (Controller ve Action Bazında) Hata Yakalama 354 Uygulamaya Özel Hata Filtresi Oluşturma 356 Authorize Fılter (Yetki Filtresi) 357 10 HELPERS (YARDIMCI METODLAR) 361 Helper Nedir? 361 HTML Helpers (HTML Kontrolleri) 363 Link Oluşturma (ActionLink) 364
XIV ASP.NET MVC 5 Form Oluşturma (BeginForm, EndForm) 365 Yazı Görüntüleme (Label) 367 Metin Giriş Kutusu (TextBox) 369 Çok Satırlı Metin Giriş Kutusu (TextArea) 370 Onay Kutusu (CheckBox) 372 Seçim Butonu (RadioButton) 373 Açılan Liste Kutusu (DropDownList) 375 Liste Kutusu (ListBox) 377 Şifre Giriş Kutusu (Password) 379 Gizli Veri Kontrolü (Hidden) 380 Strongly Typed Helpers 381 LabelFor 387 TextBoxFor 390 TextAreaFor 392 CheckBoxFor 393 RadıoButtonFor 394 DropDownListFor 396 PasswordFor 397 ValidationMessageFor 398 Web Helper 400 Grafiksel Rapor Oluşturma (Chart) 401 Bir Veri Kaynağı ile Chart Oluşturma 402 Birden Fazla Veri Kaynağı ile Chart Oluşturma 404 Chart ın Dosya Türünü Değiştirme 406 Chart ın Türünü Değiştirme 407 Noktalı Grafik Oluşturma (Point) 408 Baloncuk Grafik Oluşturma (Bubble) 409 Çizgi Grafik Oluşturma (Line) 409 Parabol Eğrili Grafik Oluşturma (Spline) 410 Yatay Çubuklu Grafik Oluşturma (Bar) 410 Dikey Çubuklu Grafik Oluşturma (Column) 411 Alanlı Grafik Oluşturma (Area) 412 Parabol Eğri Alanlı Grafik Oluşturma (Area) 412 Pasta Dilimli Grafik Oluşturma (Pie) 413 Ortası Boş Pasta Dilimli Grafik Oluşturma (Doughnut) 413 Resim Görüntüleme ve İşleme (WebImage) 414
İÇİNDEKİLER XV Resmi Görüntüleme (Write) 415 Resmi Sağa Döndürme (RotateRight) 416 Resmi Sola Döndürme (RotateLeft) 417 Resmi Yatay Yönde Ters Çevirme (FlipHorizontal) 418 Resmi Dikey Yönde Ters Çevirme (FlipVertical) 419 Resmi Yeniden Boyutlandırma (Resize) 420 Resmi Kesme (Crop) 421 Resmin Üzerine Yazı (Filigran) Ekleme (AddTextWatermark) 422 Resmin Üzerine Resim (Filigran) Ekleme (AddImageWatermark) 424 WebGrid Kullanımı 426 WebGrid Oluşturma 426 GetHtml Metodunun Kullanımı 428 Tanımlanan Sütunları Görüntüleme 429 Varsayılan Sütun Sıralamasını (defaultsort) Tanımlama 430 Sayfalama 430 Sayfalamada İlk Sayfa ve Son Sayfa Linklerini Tanımlama 431 Sütun Bazında Sıralama 432 Satırın Tamamını Tıklanabilir Yapma 432 WebGrid Verilerinde Arama Yapma 436 WebGrid Verilerini Excel e Aktarma 439 Helper Metodu Oluşturma 445 Custom Class ve Static Metod ile Helper Oluşturma 446 Extension Metod ile Helper Oluşturma 448 11 ASP.NET MVC İLE DURUM YÖNETİMİ 451 Asp.Net MVC ile Durum Yönetimi 451 Durum Yönetimi Kavramı 451 Sunucu Tabanlı Durumlar 452 Oturum Yönetimi (Session State) 452 Session Tanımlama 452 Session Değerini Okuma 454 Session Değerini Silme 454 Session Varlığını Kontrol Etme 455 Session Yaşam Süresini Belirleme 456 Session Başlatma ve Bitirme 457 Uygulama Durum Yönetimi (Application State) 459
XVI ASP.NET MVC 5 Application Değeri Tanımlama 459 Application Değerini Okuma 460 Application Değerini Silme 460 Application Nesnesinin Varlığını Kontrol Etme 461 İstemci (Client) Tabanlı Durum 461 Çerezler (Cookıe) 461 Cookie Tanımlama 462 Cookie Değerini Okuma 464 Cookie Değerini Silme 464 Cookie nin Varlığını Kontrol Etme 465 Cookie Yaşam Süresini Belirleme 466 12 JQUERY 467 Jquery Nedir? 467 Jquery ile Kodlama 467 Değişken Tanımlama 469 Değişken İçerisine Fonksiyon Tanımlama 470 Sayfa Yüklendikten Sonra İşlem Yapma 470 Butona Click Olayı Ekleme 471 Dizi Tanımlama ve Değerlerini Alma (each) 472 HTML Elemanını Seçme 473 Etiket (Tag) ile Seçme 473 CSS Sınıfı (Class) ile Seçme 475 Kimlik (Id) ile Seçme 476 İsim (Name) ile Seçme 477 Son Elemanı Seçme (last) 479 Index e Göre Eleman Seçme (eq) 480 Özelliğe Göre Belirli Türden Eleman Seçme 481 Etiketin Alt Etiketlerini Seçme 482 Elemanın Tanımlanan Özelliğinin Olup Olmadığını Kontrol Etme (is) 485 HTML Elemanlarını Filtreleme 486 İlk Elemanı Seçme (first) 487 Son Elemanı Seçme (last) 487 Tanımlanan Özelliğin Olmadığı Elemanları Seçme (not) 487 Index Numarasına Göre (Eşit Olan) Eleman Seçme (eq) 487 Index Numarasına Göre (Büyük Olan) Eleman Seçme (gt) 488
İÇİNDEKİLER XVII Index Numarasına Göre (Küçük Olan) Eleman Seçme (lt) 488 Seçimin Altındaki İlk Nesneyi ve Alt İlk Nesnelerini Seçme (first-child) 488 Tanımlanan Özelliklere Sahip Olan Nesneleri Seçme (has) 489 Gizli Nesneleri Seçme (hidden) 489 Gizli Olmayan Nesneleri Seçme (visible) 489 Pasif Nesneleri Seçme (disabled) 490 Aktif Nesneleri Seçme (enabled) 490 Açılan Liste Kutusunun Seçili Elemanını Alma (selected) 490 Seçili Onay Kutularını Alma (checked) 490 HTML Elemanlarının Yönetimi 491 Sayfadaki Tüm Nesneleri Alma (get) 491 Sayfadaki Bir Nesneyi Index Numarasına Göre Alma (get) 492 Eleman Sayısını Alma (size) 492 Elemanın Id Bilgisini Alma (id) 492 Elemanın İsim Bilgisini Alma (name) 493 Elemanın Yazı İçeriğini Alma (text) 493 Elemanın HTML İçeriğini Alma (html) 493 Elemanın Value Değerini Alma (val) 494 Elemana HTML Ekleme (append) 494 Eleman Kopyalama (clone) 495 Elemandan Sonraya Eleman Ekleme (insertafter) 495 Elemandan Önceye Eleman Ekleme (insertbefore) 496 Jquery ile AJAX İşlemleri 497 Jquery AJAX Fonksiyonları 498 $.ajax Fonksiyonu 498 $.getjson Fonksiyonu 503 $.post Fonksiyonu 504 Örnek Uygulamalar 508 Asp.Net MVC ile Çoklu Dosya Yükleme 508 Tablodaki Tüm Kayıtları Seçme / Tüm Seçimleri Kaldırma 513 Tabloda Seçili Satırları Silme 517 Metin Kutusuna Yazılan Yazının Karakter Sayısını Hesaplama 520 İlişkili Açılan Liste Uygulaması (İl - İlçe) 523 13 ÜYELİK İŞLEMLERİ 531 Üyelik İşlemi Nedir? 531
XVIII ASP.NET MVC 5 Asp.Net MVC 5 Üyelik Sisteminin Kurulumu 533 Üyelik Veritabanı 534 Üyelik Veritabanında İşlem Yapma 535 Kullanıcı Yönetimi (UserManager) 536 Kullanıcı Ekleme (Create) 536 Kullanıcıları Listeleme 540 Kullanıcı Güncelleme (Update) 543 Adına Göre Kullanıcı Bulma (FindByName) 546 Id sine Göre Kullanıcı Bulma (FindById) 548 Kullanıcının Şifresi Var Mı Kontrolü (HasPassword) 550 Kullanıcıya Şifre Ekleme (AddPassword) 550 Kullanıcının Şifresini Değiştirme (ChangePassword) 555 Kullanıcının Şifresini Silme (RemovePassword) 560 Rol Yönetimi (RoleManager) 565 Rol Ekleme (Create) 565 Rolleri Listeleme 570 Rol Güncelleme (Update) 572 Adına Göre Rol Bulma (FindByName) 575 Id sine Göre Rol Bulma (FindById) 576 Rol Var Mı Kontrolü (Exists) 578 Rol Silme 578 Kullanıcıyı Role Ekleme (AddRole) 581 Kullanıcı Rolde Mi Kontrolü (IsInRole) 584 Kullanıcının Rollerini Listeleme (GetRoles) 584 Kullanıcının Rolünü Kaldırma (RemoveFromRole) 587 Kullanıcı Kimlik Doğrulama İşlemleri (Authentication) 589 Kullanıcıya Sisteme Giriş Yaptırma (AddLogin) 589 Örnek Uygulamada Kullanıcı Giriş Sayfası Oluşturma 589 Sisteme Kullanıcı Girişi Yapıldı Mı Kontrolü 593 Sisteme Giriş Yapan Kullanıcı Bilgisini Alma 593 Kullanıcıya Sistemden Çıkış Yaptırma (SignOut) 595 14 AREA 597 Area Nedir? 597 Area Oluşturma 598 Area daki Action lara Erişim 599
İÇİNDEKİLER XIX Area nın Route Yapılandırması 600 Area nın Dizin İsmini Değiştirme 601 15 TEST 603 Test Driven Development (TDD) Nedir? 603 Red Cycle (Hatalı Sonuç Döndüren Test) 606 Green Cycle (Başarılı Sonuç Döndüren Test) 607 Refactor (Kod Temizleme) 607 Unit Test (Birim Testleri) 608 Unit Test Nedir? 608 Asp.Net MVC ile Unit Test Projesi Oluşturma 609 Unit Test Metodlarını Çalıştırma Yöntemleri 612 Visual Studio nun Kısayolunu Kullanma 612 Test Explorer Üzerinden Testleri Çalıştırma 612 Test Metodlarının Kodlaması 614 Assert.AreEqual (Eşitlik Testi) 615 Assert.AreNotEqual (Eşitsizlik Testi) 615 Assert.AreSame (Aynılık Testi) 616 Assert.AreNotSame (Aynı Olmama Testi) 616 Assert.Faıl (Başarısızlık Testi) 617 Assert.IsFalse (Değerin False Olması Testi) 617 Assert.IsTrue (Değerin True Olması Testi) 618 Assert.IsNull (Değerin Null Olması Testi) 618 Assert.IsNotNull (Değerin Null Olmaması Testi) 618 Test Metodu Çalışmadan Önce Kod Çalıştırma (TestInitialize) 619 Test Metodu Çalıştıktan Sonra Kod Çalıştırma (TestCleanUp) 620 Test Metodundan Controller daki Verilere Erişim 622 Test Metodundan ViewBag e Erişim 622 View a Gönderilen Model e Erişim 623 View dan Farklı Bir Vıew a Yönlenme (RedirectToAction) Durumuna Erişim 624 View İsmine Erişim 625 Action ın Model inin Veri Türüne Erişim 626 Action ın Geri Dönüş Türüne Erişim 627 Json Türünden Verilerin Testi 628 Web API Testleri 631 Action dan Alınan Nesnenin Testi 631
XX ASP.NET MVC 5 Action dan Alınan Listenin Testi 632 Action dan IHttpActionResult Türünden Dönen Başarılı İşlemin Testi 633 Action dan IHttpActionResult Türünden Dönen Veri Bulunamadı Durumunun Testi 635 16 PROJEYİ TANIMLAMA 637 Temel Kavramlar 637 Sunucu Nedir? 637 Hosting (Barındırma) Nedir? 638 Windows Azure Nedir? 639 Windows Azure un Avantajları 639 Windows Azure un Dezavantajları 639 Domain (Alan Adı) Nedir? 639 Subdomain (Alt Alan Adı) Nedir? 640 Asp.Net MVC Projesini Yayınlama Yöntemleri 640 Hosting Üzerinde Proje Yayınlama 641 Web Deploy 642 Web Deploy Package 644 FTP 646 File System 647 Projeyi Sunucuda Yayınlama 648 Azure Üzerinde Asp.Net MVC 5 Projesini Yayınlama 651 Windows Azure Hesabı Oluşturma 651 Yeni Web Sitesi Tanımlama 653 Veritabanı Oluşturma 655 Projeyi Wındows Azure Üzerinde Yayınlama 656 Windows Azure Üzerinde Veritabanı Yönetimi 659