Bölüm 2: Denetleyiciler

tarafından Jon Galloway

MVC Müzik Deposu, web geliştirme için ASP.NET MVC ve Visual Studio'yu kullanmayı adım adım tanıtır ve açıklar.

MVC Music Store, müzik albümlerini çevrimiçi olarak satan ve temel site yönetimi, kullanıcı oturum açma ve alışveriş sepeti işlevlerini uygulayan basit bir örnek mağaza uygulamasıdır.

Bu öğretici serisi, ASP.NET MVC Müzik Deposu örnek uygulamasını derlemek için atılan tüm adımların ayrıntılarını içerir. Bölüm 2, Denetleyiciler'i kapsar.

Geleneksel web çerçevelerinde, gelen URL'ler genellikle diskteki dosyalarla eşlenir. Örneğin: "/Products.aspx" veya "/Products.php" gibi bir URL isteği bir "Products.aspx" veya "Products.php" dosyası tarafından işlenebilir.

Web tabanlı MVC çerçeveleri, URL'leri sunucu koduyla biraz farklı bir şekilde eşler. Gelen URL'leri dosyalara eşlemek yerine URL'leri sınıflardaki yöntemlerle eşler. Bu sınıflar "Denetleyiciler" olarak adlandırılır ve gelen HTTP isteklerini işleme, kullanıcı girişini işleme, verileri alma ve kaydetme ve istemciye geri gönderme yanıtını belirleme (HTML görüntüleme, dosya indirme, farklı bir URL'ye yeniden yönlendirme vb.) sorumludur.

HomeController Ekleme

MVC Music Store uygulamamıza, sitemizin Giriş sayfasına URL'leri işleyecek bir Controller sınıfı ekleyerek başlayacağız. ASP.NET MVC'nin varsayılan adlandırma kurallarına uyup Buna HomeController adını vereceğiz.

Çözüm Gezgini içindeki "Denetleyiciler" klasörüne sağ tıklayın ve "Ekle"yi ve ardından "Denetleyici..." öğesini seçin. Komut:

Müzik mağazanıza Ev Kontrolörü seçeneği eklemek için farklı liste seçeneklerinin ekran görüntüsü.

Bu, "Denetleyici Ekle" iletişim kutusunu açar. Denetleyiciyi "HomeController" olarak adlandırın ve Ekle düğmesine basın.

Düğmenizi oluşturmak için farklı seçenekler içeren Giriş Denetleyicisi iletişim kutusunun ekran görüntüsü.

Bu, aşağıdaki kodla yeni bir HomeController.cs dosyası oluşturur:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
namespace MvcMusicStore.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/
        public ActionResult Index()
        {
            return View();
        }
    }
}

Olabildiğince basit bir başlangıç yapmak için Index yöntemini yalnızca bir dize döndüren basit bir yöntemle değiştirelim. İki değişiklik yapacağız:

  • ActionResult yerine dize döndürmek için yöntemini değiştirme
  • Return deyimini "Girişten Merhaba" döndürecek şekilde değiştirin

Yöntemi şimdi şöyle görünmelidir:

public string Index()
{
    return "Hello from Home";
}

Uygulamayı Çalıştırma

Şimdi siteyi çalıştıralım. Web sunucumuzu başlatabilir ve aşağıdakilerden birini kullanarak siteyi deneyebiliriz:

  • Hata Ayıkla ⇨ Hata Ayıklamayı Başlat menü öğesini seçin
  • Araç çubuğundaKi Yeşil ok düğmesine tıklayın Müzik deposu araç çubuğu seçeneklerinin ekran görüntüsü, hata ayıklama seçeneğini vurgulayın ve uygulamaya hata ayıklama özelliğini çalıştırma talimatı vermek için tıklayılacak oku işaretleyin.
  • F5 klavye kısayolunu kullanın.

Yukarıdaki adımlardan herhangi birini kullanmak projemizi derler ve ardından Visual Web Developer'da yerleşik olarak bulunan ASP.NET Geliştirme Sunucusu'nun başlatılmasına neden olur. Ekranın alt köşesinde ASP.NET Geliştirme Sunucusu'nun başlatıldığını belirten bir bildirim görüntülenir ve altında çalıştığı bağlantı noktası numarasını gösterir.

Sayfanın sağ alt köşesinde görüntülenen ve geliştirme sunucusunun localhost 26641'de başlatıldığını gösteren açılır bildirimin ekran görüntüsü.

Ardından Visual Web Developer, URL'si web sunucumuza işaret eden bir tarayıcı penceresini otomatik olarak açar. Bu, web uygulamamızı hızlı bir şekilde denememize olanak sağlar:

Geliştirme sunucusu localhost'ta başlatıldığında otomatik olarak başlatılan tarayıcı penceresinin ekran görüntüsü. Pencerede tarayıcıda 'evden merhaba' sözcükleri görüntülenir.

Tamam, bu oldukça hızlıydı - yeni bir web sitesi oluşturduk, üç satırlık bir işlev ekledik ve bir tarayıcıda metin aldık. Uzay mekik bilimi değil, ama bu bir başlangıç.

Not: Visual Web Developer, web sitenizi rastgele bir ücretsiz "bağlantı noktası" numarası üzerinde çalıştıracak olan ASP.NET Geliştirme Sunucusu'nu içerir. Yukarıdaki ekran görüntüsünde, site konumunda http://localhost:26641/çalışıyor, bu nedenle 26641 numaralı bağlantı noktasını kullanıyor. Bağlantı noktası numaranız farklı olacaktır. Bu öğreticide /Store/Browse gibi URL'ler hakkında konuştuğumuzda, bağlantı noktası numarasından sonra gider. 26641 numaralı bir bağlantı noktası varsayarsak, /Store/Browse'a göz atmak adresine göz atmak http://localhost:26641/Store/Browseanlamına gelir.

StoreController Ekleme

Sitemizin Giriş Sayfasını uygulayan basit bir HomeController ekledik. Şimdi müzik mağazamızın göz atma işlevselliğini uygulamak için kullanacağımız başka bir denetleyici ekleyelim. Mağaza denetleyicimiz üç senaryoya destek olacaktır:

  • Müzik mağazamızda müzik türlerinin liste sayfası
  • Belirli bir türdeki tüm müzik albümlerini listeleyen bir göz atma sayfası
  • Belirli bir müzik albümü hakkındaki bilgileri gösteren ayrıntılar sayfası

Yeni bir StoreController sınıfı ekleyerek başlayacağız.. Henüz yapmadıysanız, tarayıcıyı kapatarak veya Hata Ayıkla ⇨ Hata Ayıklamayı Durdur menü öğesini seçerek uygulamayı çalıştırmayı durdurun.

Şimdi yeni bir StoreController ekleyin. HomeController'da yaptığımız gibi, bunu da Çözüm Gezgini içindeki "Denetleyiciler" klasörüne sağ tıklayıp Denetleyici Ekle> menü öğesini seçerek yapacağız

Müzik deposu uygulamasına mağaza denetleyicisi seçenekleri ekleme seçimlerini içeren pencere menüsünün ekran görüntüsü.

Yeni StoreController'ımızın zaten bir "Index" yöntemi var. Müzik mağazamızdaki tüm türleri listeleyen listeleme sayfamızı uygulamak için bu "Index" yöntemini kullanacağız. Ayrıca StoreController'ımızın işlemesini istediğimiz diğer iki senaryoyu uygulamak için iki yöntem daha ekleyeceğiz: Gözat ve Ayrıntılar.

Denetleyicimiz içindeki bu yöntemler (Dizin, Gözatma ve Ayrıntılar) "Denetleyici Eylemleri" olarak adlandırılır ve HomeController.Index()eylem yönteminde gördüğünüz gibi, görevleri URL isteklerine yanıt vermek ve (genel olarak konuşmak) URL'yi çağıran tarayıcıya veya kullanıcıya hangi içeriğin geri gönderilmesi gerektiğini belirlemektir.

StoreController uygulamamızı başlatmak içinIndex() yöntemini değiştirerek "Hello from Store.Index()" dizesini döndüreceğiz ve Browse() ve Details() için benzer yöntemler ekleyeceğiz:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
namespace MvcMusicStore.Controllers
{
    public class StoreController : Controller
    {
        //
        // GET: /Store/
        public string Index()
        {
            return "Hello from Store.Index()";
        }
        //
        // GET: /Store/Browse
        public string Browse()
        {
            return "Hello from Store.Browse()";
        }
        //
        // GET: /Store/Details
        public string Details()
        {
            return "Hello from Store.Details()";
        }
    }
}

Projeyi yeniden çalıştırın ve aşağıdaki URL'lere göz atın:

  • /Mağazası
  • /Store/Gözat
  • /Store/Details

Bu URL'lere erişirken Denetleyicimiz içindeki eylem yöntemleri çağrılır ve dize yanıtları döndürülür:

U R L'ye erişirken çağrılan eylem yöntemlerinin bir örneğini gösteren pencere tarayıcısının ekran görüntüsü. Şu dize yanıtını gösterir: Store.Details() uygulamasından Hello

Bu harika, ancak bunlar yalnızca sabit dizelerdir. Url'den bilgi alıp sayfa çıkışında görüntüleyebilmeleri için bunları dinamik hale getirelim.

İlk olarak, URL'den bir querystring değeri almak için Gözat eylem yöntemini değiştireceğiz. Bunu eylem yöntemimize bir "tarz" parametresi ekleyerek yapabiliriz. Bunu yaptığımızda ASP.NET MVC çağrıldığında eylem yöntemimize "genre" adlı tüm sorgu dizelerini veya form post parametrelerini otomatik olarak geçirir.

//
// GET: /Store/Browse?genre=Disco
public string Browse(string genre)
 {
    string message = HttpUtility.HtmlEncode("Store.Browse, Genre = "
+ genre);
 
    return message;
 }

Not: Kullanıcı girişini temizleme amacıyla HttpUtility.HtmlEncode yardımcı programı yöntemini kullanıyoruz. Bu, kullanıcıların /Store/Browse gibi bir bağlantıyla Görünümümüze Javascript eklemesini engeller. Genre=<script>window.location='http://hackersite.com'</script>.

Şimdi /Store/Browse konumuna göz atalım. Tarz=Disko

'genre' parametresi eklenirken bir querystring değeri alınırken URL tarafından döndürülen bir dizenin (Store.Browse, Genre = Disco) başka bir örneğini gösteren ekran görüntüsü.

Şimdi Ayrıntılar eylemini id adlı bir giriş parametresini okuyacak ve görüntüleyecek şekilde değiştirelim. Önceki yöntemimizden farklı olarak, kimlik değerini querystring parametresi olarak eklemeyeceğiz. Bunun yerine doğrudan URL'nin içine ekleyeceğiz. Örneğin: /Store/Details/5.

ASP.NET MVC, herhangi bir şey yapılandırmak zorunda kalmadan bunu kolayca yapmamıza olanak tanır. ASP.NET MVC'nin varsayılan yönlendirme kuralı, eylem yöntemi adından sonraki URL segmentini "ID" adlı bir parametre olarak işlemektir. Eylem yönteminizde ID adlı bir parametre varsa ASP.NET MVC, URL kesimini size otomatik olarak parametre olarak geçirir.

//
// GET: /Store/Details/5
public string Details(int id)
 {
    string message = "Store.Details, ID = " + id;
 
    return message;
 }

Uygulamayı çalıştırın ve /Store/Details/5 adresine gidin:

U R L kesiminden geçirilen parametrenin ekran görüntüsü. parametresi, Store.Details, ID=5 değerini okuyan bir dizedir.

Şu ana kadar yaptıklarımızı özetleyelim:

  • Visual Web Developer'da yeni bir ASP.NET MVC projesi oluşturduk
  • ASP.NET MVC uygulamasının temel klasör yapısını ele aldık
  • ASP.NET Geliştirme Sunucusu'nu kullanarak web sitemizi çalıştırmayı öğrendik
  • İki Denetleyici sınıfı oluşturduk: HomeController ve StoreController
  • Denetleyicilerimize URL isteklerine yanıt veren ve tarayıcıya metin döndüren Eylem Yöntemleri ekledik