Asp.Net MVC

Asp.Net MVC 5 – Controller’dan Model Verilerine Erişme

MvcMovie uygulamasını geliştirmeye devam ediyoruz. Daha önceki makaleleri okuduysanız, MvcMovie adında bir proje oluşturdunuz. Bu proje üzerinde Controller eklemeyi, View eklemeyi, Model eklemeyi ve Razor saylar ile çalışmayı öğrendiniz. Artık projenizi gerçek bir MVC projesine dönüştürerek katmalar arası bilgi alışverişlerini programlamaya hazırsınız. Hadi başlayalım…

Bu makalede ile, MoviesController isimli yeni bir sınıf oluşturacak ve Movie veritabanı verilerini alarak görünüm şablonu aracılığı ile tarayıcıda görüntüleyen bir kod yazacasınız.

Sonraki adıma geçmeden önce uygulamanızı şu anki hali ile derleyin (Build). Uygulamayı derlemezseniz, denetleyici eklenirken bir hata alırsınız.

Solution Explorer, Controllers klasörüne sağ tıklayın. Ardından Add‘ ye ve sonra Controller‘ ye tıklayın.

Add Scaffold iletişim kutusunda, MVC 5 Controller with views, using Entity Framework‘ ye tıklayın ve ardından Add‘ ye tıklayın.

  • Model sınıfı için Movie (MvcMovie.Models)seçin.
  • Veri bağlamı sınıfı için Moviedbcontext(MvcMovie.Models)öğesini seçin.
  • Denetleyici adı için MoviesController

Aşağıdaki görüntüde tamamlanan iletişim kutusu gösterilmektedir.

Add‘ye tıklayın. (Bir hata alırsanız, denetleyiciyi eklemeye başlamadan önce uygulamayı derlememenizden kaynaklı olabilir) Visual Studio aşağıdaki dosyaları ve klasörleri oluşturur:

  • Controllers klasöründeki bir MoviesController.cs dosyası.
  • Views\Movies klasörü.
  • Yeni Views\Moviesklasöründe create.cshtml, delete.cshtml, details.cshtml, edit.cshtml ve cshtml oluşturuldu.

Visual Studio CRUD (oluşturma, okuma, güncelleştirme ve silme) eylem yöntemlerini ve görünümlerini sizin için otomatik olarak oluşturdu. (CRUD eylem yöntemlerinin ve görünümlerinin otomatik olarak oluşturulması, yapı iskelesi olarak bilinir). Artık, Moview girişleri oluşturmanızı, listelemenizi, düzenlemenizi ve silmenizi sağlayan tam işlevli bir Web uygulamanız vardır.

Uygulamayı çalıştırın ve MVC Movie bağlantısına tıklayın (veya tarayıcının adres çubuğundaki URL ‘ye /Movies ekleyerek denetleyiciye gidin). Uygulama varsayılan yönlendirmeye bağlı olduğundan ( App _Start\routeconfig.cs dosyasında tanımlanan), tarayıcı isteği http://localhost:xxxxx/Movies denetleyicinin varsayılan Index  eylem yöntemine yönlendirilir.  Diğer bir deyişle, http://localhost:xxxxx/Movies tarayıcı isteği ile, http://localhost:xxxxx/Movies/Index tarayıcı isteğiyle aynı şekilde aynıdır. Henüz hiç eklemediğiniz için sonuç, filmlerin boş bir listesidir.

Film oluşturma

Create New bağlantısını seçin. Bir film hakkındaki ayrıntıları girin ve ardından Create düğmesine tıklayın.

Create düğmesine tıkladığınızda form, film bilgilerinin veritabanına kaydedildiği sunucuya gönderilmesini sağlar. Daha sonra, yeni oluşturulan filmi listede görebileceğiniz /Movies URL ‘sine yönlendirilirsiniz.

Birkaç film girişi oluşturun. Tüm işlevsel olan Edit, Details ve Delete bağlantılarını deneyin.

Oluşturulan kodu İnceleme

Controllers\MoviesController.cs dosyasını açın ve oluşturulan Index yöntemi inceleyin. Aşağıda Index yöntemini içeren MovieController denetleyicisinin bir bölümü gösterilmiştir.

Denetleyiciye yönelik bir istek Movies tablosundaki tüm girişleri döndürür. Sonra sonuçları Index görünüme geçirir. MoviesController sınıfında bulunan aşağıdaki satır, daha önce açıklandığı gibi bir Movie veritabanı bağlantısı oluşturur. Movie veritabanı bağlantısını kullanarak filmleri sorgulayabilir, düzenleyebilir ve silebilirsiniz.

Türü kesin belirlenmiş modeller ve @model anahtar sözcüğü

Bu makalede daha önce, bir denetleyicinin ViewBag nesnesini kullanarak, bir görünüm şablonuna nasıl veri veya nesne iletebileceğini gördünüz. ViewBag, bir görünüme bilgi aktarmak için uygun, kolay bir yol sağlayan dinamik bir nesnedir.

MVC Ayrıca, türü kesin belirlenmiş nesneleri bir görünüm şablonuna geçirebilme olanağı da sağlar. Bu kesin türü belirtilmiş yaklaşım, Visual Studio kod düzenleyicisinde kodun derleme zamanı denetimini ve tam IntelliSense desteğini elde sunar.

Controllers\MoviesController.cs dosyasında, oluşturulan Details yöntemi inceleyin. Details yöntemi aşağıda gösterilmiştir.

Id parametresi genellikle rota verileri olarak geçirilir. Örneğin, http://localhost:1234/movies/details/1 denetleyiciyi Movies denetleyicisine, yöntemini Details’e ve Details yönteminin beklediği Id parametresini 1’e ayarlar . Ayrıca kimliği bir sorgu dizesi ile aşağıdaki gibi geçirebilirsiniz:

http://localhost:1234/movies/details?id=1

Sorgu sonucu bir kayıt bulunursa, Movie modelin bir örneği Details görünüme aktarılır:

Views\Movies\Details.cshtml dosyasının içeriğini inceleyin:

Görünüm şablonu dosyasının üst kısmına bir ifade ekleyerek (@model), görünümün beklediği nesne türünü belirtebilirsiniz. MovieController’ı oluştururken, Visual Studio sizin için details.cshtml dosyasının en üstüne aşağıdaki ifadeyi otomatik olarak dahil etti:

@model MvcMovie.Models.Movie

Bu yönerge, kesin olarak belirlenmiş bir nesne kullanarak denetleyicinin görünüme geçirildiği nesneye erişmenizi sağlar.

Index.cshtml görünüm şablonunu ve MoviesController.cs dosyasındaki Index yöntemi inceleyin. Index eylem yönteminde, List kodun nasıl bir nesne oluşturduğunu gözlemleyin. Kod daha sonra bu Movies listeyi Index eylem yönteminden görünüme geçirir:

Movie denetleyicisini oluştururken, Visual Studio Index.cshtml dosyasının en üstüne aşağıdaki ifadeyi otomatik olarak dahil etti:

Bu yönerge, kesin olarak belirlenmiş bir nesne kullanarak, denetleyicinin görünüme geçirdiği film listesine erişmenizi sağlar. Örneğin, Index.cshtml şablonunda, foreach kodu ile türü kesin belirlenmiş nesne üzerinde bir döngü yaparak, bulunan liste elemanlarını html kodumuzun içerisine işledi:

Nesne türü kesin belirlenmiş olduğundan (IEnumerable<Movie>), döngüdeki her bir Item nesne olarak yazılır. Diğer avantajlar arasında bu, kod düzenleyicisinde kodun derleme zamanı denetimini ve tam IntelliSense desteğini elde ettiğiniz anlamına gelir:

ModelIntelliSense

SQL Server Yerel Veritabanı ile çalışma

Entity Framework Code First (kod öncelikli), belirtilen veritabanı bağlantı dizesinin henüz mevcut olmayan bir veritabanına işaret ettiği algılandı, bu nedenle veritabanını otomatik olarak oluşturdu. App_Data klasörüne bakarak oluşturulduğunu doğrulayabilirsiniz. Movies.mdf dosyasını görmüyorsanız, Solution Explorer araç çubuğunda Show All Files düğmesine tıklayın, Refresh düğmesine tıklayın ve ardından App_Data klasörünü genişletin.

Movie.mdf ‘ye çift tıklayarak Server Explorer’ı açın ve ardından Movies tablosunu görmek için Tablas klasörünü genişletin. ID‘nin yanındaki anahtar simgesi göz önünde. Varsayılan olarak EF, birincil anahtar adlı bir özellik oluşturacak.

DB_explorer

Tabloya sağ tıklayıp Show Table Data‘yı seçerek oluşturduğunuz verileri görüntüleyin.

Tabloya sağ tıklayıp Open Table Definition‘ı seçerek Entity Framework Code First’un sizin için oluşturduğu tablo yapısını görüntüleyin.

 

Tablo şemasının, daha önce oluşturduğunuz sınıfa nasıl eşlendiğini unutmayın. Entity Framework Code First, bu şemayı sınıfınıza göre sizin için otomatik olarak oluşturdu.

İşiniz bittiğinde, Moviedbcontexti sağ tıklatıp Close Connection’ı seçerek bağlantıyı kapatın. (Bağlantıyı kapatmazsanız, projeyi bir sonraki çalıştırışınızda bir hata alabilirsiniz).

Artık veri görüntüleme, düzenleme, güncelleştirme ve silme için bir veritabanınız ve sayfalarınız vardır. Sonraki makalede, yapı iskelesi kodunun geri kalanını inceleyeceğiz. Bu veritabanında film aramanıza olanak tanıyan bir yöntem ve bir görünüm ekleyeceğiz.

Yorum Yap