Aracılığıyla paylaş


Bir Denetleyiciden Modelinizin Verilerine Erişme (C#)

tarafından Rick Anderson

Not

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

Bu öğreticide, Microsoft Visual Studio'nun ücretsiz sürümü olan Microsoft Visual Web Developer 2010 Express Service Pack 1'i kullanarak ASP.NET MVC Web uygulaması oluşturmanın temelleri öğretilecektir. Başlamadan önce, aşağıda listelenen önkoşulları yüklediğinizden emin olun. Aşağıdaki bağlantıya tıklayarak bunların tümünü yükleyebilirsiniz: Web Platformu Yükleyicisi. Alternatif olarak, aşağıdaki bağlantıları kullanarak önkoşulları tek tek yükleyebilirsiniz:

Visual Web Developer 2010 yerine Visual Studio 2010 kullanıyorsanız, aşağıdaki bağlantıya tıklayarak önkoşulları yükleyin: Visual Studio 2010 önkoşulları.

C# kaynak koduna sahip bir Visual Web Developer projesi bu konuya eşlik edebilir. C# sürümünü indirin. Visual Basic'i tercih ediyorsanız bu öğreticinin Visual Basic sürümüne geçin.

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. Devam etmeden önce uygulamanızı derlemeyi unutmayın.

Denetleyiciler klasörüne sağ tıklayın ve yeni MoviesController bir denetleyici oluşturun. Aşağıdaki seçenekleri belirtin:

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

AddScaffoldedMovieController

Ekle'ye tıklayın. Visual Web Developer aşağıdaki dosya ve klasörleri oluşturur:

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

NewMovieControllerScreenShot

ASP.NET MVC 3 yapı iskelesi mekanizması, CRUD (oluşturma, okuma, güncelleştirme ve silme) eylem yöntemlerini ve görünümlerini sizin için otomatik olarak oluşturmuştur. 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 adres çubuğundaki Movies URL'ye /Movies 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.

Film Listem sayfasındaki M V C Movie App tarayıcı penceresini 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.

Oluştur sayfasındaki M V C Movie App tarayıcı penceresini gösteren ekran görüntüsü.

Oluştur düğmesine tıklanması, formun film bilgilerinin veritabanına kaydedildiği sunucuya nakledilmesine neden olur. 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 ViewResult 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ürü Belirlenmiş Modeller ve @model Anahtar Sözcük

Bu öğreticinin önceki bölümlerinde, bir denetleyicinin nesneyi 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 kullanışlı 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 Web Developer düzenleyicisinde kodunuzun daha iyi derlenmesine ve daha zengin IntelliSense'e olanak tanır. Bu yaklaşımı sınıf ve Index.cshtml görünüm şablonuyla MoviesController kullanıyoruz.

Kodun eylem yönteminde View yardımcı yöntemini çağırdığında 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 ViewResult Index()
{
    return View(db.Movies.ToList());
}

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 Web Developer otomatik olarak Index.cshtml dosyasının en üstüne aşağıdaki @model deyimini ekler:

@model IEnumerable<MvcMovie.Models.Movie>

Bu @model yönerge, kesin olarak yazılan bir Model nesne kullanarak denetleyicinin görünüme geçirdiği film listesine erişmenizi sağlar. Örneğin, Index.cshtml şablonunda kod, kesin olarak yazılan Model nesne üzerinde bir foreach deyim yaparak filmler arasında 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>
        <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>
}

Model Nesne kesin olarak yazıldığı için (nesne IEnumerable<Movie> olarak), döngüdeki her item nesne olarak Movieyazılır. Bu, kod düzenleyicisinde kodun derleme zamanı denetimini ve tam IntelliSense desteğini elde ettiğiniz anlamına gelir:

ModelIntelliSense

SQL Server Compact ile çalışma

Entity Framework Code First, sağlanan veritabanı bağlantı dizesinin 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.sdf dosyasını görmüyorsanız, Çözüm Gezgini araç çubuğunda 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.

SDF_in_SolnExp

Sunucu Gezgini'ne çift tıklayarak Movies.sdf dosyasını açın. Ardından, veritabanında oluşturulmuş tabloları görmek için Tablolar klasörünü genişletin.

Not

Movies.sdf'ye çift tıkladığınızda hata alırsanız 4.0 SQL Server Compact yüklediğinizden emin olun (çalışma zamanı + araçlar desteği). (Yazılımın bağlantıları için bu öğretici serisinin 1. bölümündeki önkoşulların listesine bakın.) Sürümü şimdi yüklerseniz Visual Web Developer'ı kapatıp yeniden açmanız gerekir.

DB_explorer

Biri varlık kümesi, diğeri de tablo için Movie olan EdmMetadata iki tablo vardır. Tablo EdmMetadata , modelle veritabanının ne zaman eşitlenmediğini belirlemek için Entity Framework tarafından kullanılır.

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

MoviesTable

Tabloya sağ tıklayın ve Tablo Şemasını MoviesDüzenle'yi seçin.

EditTableSchema

TableSchemaSM

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 bu şemayı sınıfınızı Movie temel alarak sizin için otomatik olarak oluşturmuştur.

İşiniz bittiğinde bağlantıyı kapatın. (Bağlantıyı kapatmıyorsanız, projeyi bir sonraki çalıştırmanızda bir hata alabilirsiniz).

CloseConnection

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ı inceleyecek ve bu veritabanında film aramanızı sağlayan bir SearchIndexSearchIndex yöntem ve görünüm ekleyeceğiz.