Aracılığıyla paylaş


Görünüm Şablonu Kullanarak Modelinizin Verilerine Denetleyiciden Erişme

tarafından Rick Anderson

Not

Bu öğreticinin ASP.NET MVC 5 ve Visual Studio 2013 kullanan güncelleştirilmiş bir sürümü burada sağlanır. Daha güvenlidir, takip etmek çok daha kolaydır ve daha fazla özellik gösterir.

Bu bölümde, yeni MoviesController bir sınıf oluşturacak ve film verilerini alan ve bir görünüm şablonu kullanarak tarayıcıda görüntüleyen kod yazacaksınız.

Sonraki adıma geçmeden önce uygulamayı derleyin.

Denetleyiciler klasörüne sağ tıklayın ve yeni MoviesController bir denetleyici oluşturun. Aşağıdaki seçenekler, uygulamanızı oluşturana kadar görünmez. Aşağıdaki seçenekleri belirleyin:

  • Denetleyici adı: MoviesController. (Bu varsayılandır. )
  • Şablon: Entity Framework kullanarak okuma/yazma eylemleri ve görünümleri olan MVC Denetleyicisi.
  • Model sınıfı: Movie (MvcMovie.Models).
  • Veri bağlamı sınıfı: MovieDBContext (MvcMovie.Models).
  • Görünümler: Razor (CSHTML). (Varsayılan değerdir.)

AddScaffoldedMovieController

Ekle'yi tıklatın. Visual Studio Express aşağıdaki dosya ve klasörleri oluşturur:

  • Projenin Denetleyiciler klasöründeki bir MoviesController.cs dosyası.
  • Projenin Görünümler klasöründeki Filmler klasörü.
  • Yeni Views\Movies klasöründe create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml ve Index.cshtml.

ASP.NET MVC 4 sizin için CRUD (oluşturma, okuma, güncelleştirme ve silme) eylem yöntemlerini ve görünümlerini otomatik olarak oluşturmuştur (CRUD eylem yöntemlerinin ve görünümlerinin otomatik olarak oluşturulması iskele olarak bilinir). Artık film girdileri oluşturmanıza, listelemenize, düzenlemenize ve silmenize olanak tanıyan tam işlevsel bir web uygulamanız var.

Uygulamayı çalıştırın ve tarayıcınızın Movies adres çubuğundaKI URL'ye /Filmler'i ekleyerek denetleyiciye göz atın. Uygulama varsayılan yönlendirmeye bağlı olduğundan (Global.asax dosyasında tanımlanır), tarayıcı isteği http://localhost:xxxxx/Movies denetleyicinin varsayılan Index eylem yöntemine Movies yönlendirilir. Başka bir deyişle, tarayıcı isteği http://localhost:xxxxx/Movies etkin bir şekilde tarayıcı isteği http://localhost:xxxxx/Movies/Indexile aynıdır. Sonuç, henüz hiç film eklemediğiniz için boş bir film listesidir.

M V C Film Dizini sayfasını gösteren ekran görüntüsü.

Film Oluşturma

Yeni Oluştur bağlantısını seçin. Filmle ilgili bazı ayrıntıları girin ve Oluştur düğmesine tıklayın.

M V C Film Oluşturma sayfasını gösteren ekran görüntüsü.

Oluştur düğmesine tıklandığında form, film bilgilerinin veritabanına kaydedildiği sunucuya gönderilir. Daha sonra listede yeni oluşturulan filmi görebileceğiniz /Movies URL'sine yönlendirilirsiniz.

IndexWhenHarryMet

Birkaç film girdisi daha oluşturun. Tümü işlevsel olan Düzenle, Ayrıntılar ve Sil bağlantılarını deneyin.

Oluşturulan Kodu inceleme

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

public class MoviesController : Controller
{
    private MovieDBContext db = new MovieDBContext();

    //
    // GET: /Movies/

    public ActionResult Index()
    {
        return View(db.Movies.ToList());
    }

Sınıfından MoviesController aşağıdaki satır, daha önce açıklandığı gibi bir film veritabanı bağlamı oluşturur. Filmleri sorgulamak, düzenlemek ve silmek için film veritabanı bağlamını kullanabilirsiniz.

private MovieDBContext db = new MovieDBContext();

Denetleyiciye yönelik Movies bir istek, film veritabanının tablosundaki Movies tüm girişleri döndürür ve ardından sonuçları görünüme Index geçirir.

Kesin Türemiş Modeller ve @model Anahtar Sözcük

Bu öğreticinin önceki bölümlerinde, bir denetleyicinin nesnesini kullanarak verileri veya nesneleri bir görünüm şablonuna ViewBag nasıl geçirebileceğini gördünüz. ViewBag, bilgileri bir görünüme geçirmek için uygun bir geç bağlı yol sağlayan dinamik bir nesnedir.

ASP.NET MVC, kesin olarak yazılan verileri veya nesneleri bir görünüm şablonuna geçirme olanağı da sağlar. Bu kesin olarak belirlenmiş yaklaşım, Visual Studio düzenleyicisinde kodunuzun daha iyi derlenmesine ve daha zengin IntelliSense'e olanak tanır. Visual Studio'daki yapı iskelesi mekanizması, yöntemleri ve görünümleri oluştururken sınıfı ve görünüm şablonlarıyla MoviesController bu yaklaşımı kullandı.

Controllers\MoviesController.cs dosyasında oluşturulan Details yöntemi inceleyin. Film denetleyicisinin yöntemiyle Details bir bölümü aşağıda gösterilmiştir.

public ActionResult Details(int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

Movie bulunursa, modelin Movie bir örneği Ayrıntılar görünümüne geçirilir. Views\Movies\Details.cshtml dosyasının içeriğini inceleyin.

Görünüm şablonu dosyasının en üstüne bir @model deyim ekleyerek, görünümün beklediği nesne türünü belirtebilirsiniz. Film denetleyicisini oluşturduğunuzda, Visual Studio otomatik olarak Details.cshtml dosyasının en üstüne aşağıdaki @model deyimini ekledi:

@model MvcMovie.Models.Movie

Bu @model yönerge, kesin olarak yazılan bir Model nesne kullanarak denetleyicinin görünüme iletmiş olduğu filme erişmenizi sağlar. Örneğin, Details.cshtml şablonunda kod, her film alanını kesin olarak yazılan Model nesneyle ve HTML Yardımcıları için Görüntüle'ye DisplayNameFor geçirir. Oluşturma ve Düzenleme yöntemleri ve görünüm şablonları da bir film modeli nesnesi geçirir.

index.cshtml görünüm şablonunu ve Index MoviesController.cs dosyasındaki yöntemini inceleyin. Kodun eylem yönteminde yardımcı yöntemini çağırdığında View nasıl bir List nesne oluşturduğuna Index dikkat edin. Kod daha sonra bu Movies listeyi denetleyiciden görünüme geçirir:

public ActionResult Index()
{
    return View(db.Movies.ToList());
}

Film denetleyicisini oluşturduğunuzda Visual Studio Express, Index.cshtml dosyasının en üstüne otomatik olarak aşağıdaki @model deyimi ekler:

@model IEnumerable<MvcMovie.Models.Movie>

Bu @model yönerge, kesin olarak yazılan bir Model nesne kullanarak denetleyicinin görünüme iletmiş olduğu film listesine erişmenizi sağlar. Örneğin, Index.cshtml şablonunda kod, kesin olarak yazılan Model nesne üzerinde bir foreach deyim yaparak filmlerde döngü yapar:

@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", { id=item.ID })  |
            @Html.ActionLink("Delete", "Delete", { id=item.ID }) 
        </td>
    </tr>
}

Model Nesne kesin olarak yazıldığı için (nesne IEnumerable<Movie> olarak), döngüdeki her item nesne olarak Movieyazılır. Diğer avantajların yanı üzere, 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, sağlanan veritabanının bağlantı dizesi henüz var olmayan bir Movies veritabanına işaret ettiğini algıladı, bu nedenle Code First 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, Çözüm Gezgini araç çubuğundaki Tüm Dosyaları Göster düğmesine tıklayın, Yenile düğmesine tıklayın ve ardından App_Data klasörünü genişletin.

Çözüm Gezgini penceresini gösteren ekran görüntüsü. Tüm Dosyaları Göster simgesi kırmızıyla daire içine alınır ve Uygulama Verileri klasörü seçilir.

VERITABANı GEZGINI'ni açmak için Movies.mdf çift tıklayın, ardından Filmler tablosunu görmek için Tablolar klasörünü genişletin.

DB_explorer

Not

Veritabanı gezgini görünmüyorsa, ARAÇLAR menüsünde Veritabanına Bağlan'ı seçin, ardından Veri Kaynağı Seç iletişim kutusunu iptal edin. Bu, veritabanı gezginini açmaya zorlar.

Not

VWD veya Visual Studio 2010 kullanıyorsanız ve aşağıdakilerden herhangi birine benzer bir hata alırsanız:

  • 'C:\Webs\MVC4\MVCMOVIE\MVCMOVIE\APP_DATA\MOVIES veritabanı. MDF' sürüm 706 olduğundan açılamıyor. Bu sunucu 655 ve önceki sürümleri destekler. Eski sürüme düşürme yolu desteklenmez.
  • "InvalidOperation Exception kullanıcı kodu tarafından işlenmedi" Sağlanan SqlConnection ilk kataloğu belirtmiyor.

SQL Server Veri Araçları ve LocalDB'yi yüklemeniz gerekir. MovieDBContext Önceki sayfada belirtilen bağlantı dizesi doğrulayın.

Oluşturduğunuz verileri görmek için tabloya Movies sağ tıklayın ve Tablo Verilerini Göster'i seçin.

d b o dot Film Verileri sekmesini gösteren ekran görüntüsü.

Entity Framework Code First'in Movies sizin için oluşturduğu tablo yapısını görmek için tabloya sağ tıklayın ve Tablo Tanımını Aç'ı seçin.

Veritabanı Gezgini penceresini gösteren ekran görüntüsü. Filmler sağ tıklama menüsünde Tablo Tanımı'nı aç seçilidir.

D b o nokta filmler sekmesini ve altında Entity Framework Code'u gösteren ekran görüntüsü.

Tablo şemasının Movies daha önce oluşturduğunuz sınıfla nasıl eşlediğinize Movie dikkat edin. Entity Framework Code First, sınıfınızı Movie temel alarak bu şemayı sizin için otomatik olarak oluşturmuştur.

İşiniz bittiğinde MovieDBContext öğesine sağ tıklayıp Bağlantıyı Kapat'ı seçerek bağlantıyı kapatın. (Bağlantıyı kapatmıyorsanız, projeyi bir sonraki çalıştırmanızda hata alabilirsiniz).

Veritabanı Gezgini penceresini gösteren ekran görüntüsü. Film D B Bağlamı sağ tıklama menüsünde Bağlantıyı Kapat seçilidir.

Artık veritabanının içeriğini görüntülemek için basit bir listeleme sayfasına sahipsiniz. Sonraki öğreticide, iskelesi oluşturulmuş kodun geri kalanını inceleyeceğiz ve bu veritabanında film aramanızı sağlayan bir SearchIndex SearchIndex yöntem ve görünüm ekleyeceğiz.