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.
1 2 3 4 5 6 7 8 9 10 | public class MoviesController : Controller { private MovieDBContext db = new MovieDBContext(); // GET: /Movies/ public ActionResult Index() { return View(db.Movies.ToList()); } |
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.
1 2 3 | private MovieDBContext db = new MovieDBContext(); |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public ActionResult Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Movie movie = db.Movies.Find(id); if (movie == null) { return HttpNotFound(); } return View(movie);} |
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:
1 2 3 | return View(movie); |
Views\Movies\Details.cshtml dosyasının içeriğini inceleyin:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | @model MvcMovie.Models.Movie @{ ViewBag.Title = "Details"; } <h2>Details</h2> <div> <h4>Movie</h4> <hr/> <dl class="dl-horizontal"> <dt> @Html.DisplayNameFor(model => model.Title) </dt> @*Markup omitted for clarity.*@ </dl> </div> <p> @Html.ActionLink("Edit", "Edit", new { id = Model.ID }) | @Html.ActionLink("Back to List", "Index") </p> |
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:
1 2 3 4 5 6 | public ActionResult Index() { return View(db.Movies.ToList()); } |
Movie denetleyicisini oluştururken, Visual Studio Index.cshtml dosyasının en üstüne aşağıdaki ifadeyi otomatik olarak dahil etti:
1 2 3 | @model IEnumerable<MvcMovie.Models.Movie> |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem => item.Genre) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <th> @Html.DisplayFor(modelItem => item.Rating) </th> <td> @Html.ActionLink("Edit", "Edit", new { id=item.ID }) | @Html.ActionLink("Details", "Details", new { id=item.ID }) | @Html.ActionLink("Delete", "Delete", new { id=item.ID }) </td> </tr> } |
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:
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.
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, Moviedbcontext‘i 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.
Merhaba,
İş görüşmesinde salı gününe kadar mvc proje sunumu istenmiştir. Projenin yapılmadı ve anlatımı için ücreti karşılığında yardımcı olabilir misiniz.
Süre kısıtlı olduğu olduğu için acil dönüş yapmanızı rica edeim.