ASP.NET MVC 3

(Nisan 2011 Araç Güncelleştirmesi'ne dahildir)

ASP.NET MVC 3, iyi oluşturulmuş tasarım desenlerini ve ASP.NET ve .NET Framework'ün gücünü kullanarak ölçeklenebilir, standartlara dayalı web uygulamaları oluşturmaya yönelik bir çerçevedir.

ASP.NET MVC 2 ile yan yana yüklenir, bu nedenle hemen kullanmaya başlayın!

Yükleyiciyi buradan indirin

En Önemli Özellikler

  • NuGet aracılığıyla genişletilebilir tümleşik yapı iskelesi sistemi
  • HTML 5 özellikli proje şablonları
  • Yeni Razor Görünüm Motoru da dahil olmak üzere İfadeli Görünümler
  • Bağımlılık Enjeksiyonu ve Genel Eylem Filtreleri ile güçlü kancalar
  • Göze çarpmayan JavaScript, jQuery Doğrulaması ve JSON bağlaması ile zengin JavaScript desteği
  • Aşağıdaki özellik listesinin tamamını okuyun

ASP.NET MVC 3'teki Yenilikler

Yükleme ve Yardım

ASP.NET MVC 3'e Genel Bakış

ASP.NET MVC 3, ASP.NET MVC 1 ve 2'de derlenir ve hem kodunuzu basitleştiren hem de daha derin genişletilebilirlik sağlayan harika özellikler ekler. Bu konu başlığı altında, bu sürümde yer alan ve aşağıdaki bölümlere ayrılmış olan birçok yeni özelliğe genel bir bakış sağlanmaktadır:

MvcScaffold tümleştirmesi ile Genişletilebilir iskelet oluşturma

Yeni yapı iskelesi sistemi, çerçeveye tamamen yabancıysanız sistemi anlamayı ve üretken bir şekilde kullanmaya başlamayı veya deneyimliyseniz ve ne yaptığınızı zaten biliyorsanız yaygın geliştirme süreçlerini otomatikleştirmeyi kolaylaştırır.

Bu, MvcScaffolding adlı yeni NuGet iskele paketi tarafından desteklenir. "Scaffolding" terimi, birçok yazılım teknolojisi tarafından "daha sonra düzenleyip özelleştirebileceğiniz yazılımınızın temel iskeletini hızlıca oluşturmak" anlamında kullanılır. ASP.NET MVC için oluşturduğumuz yapı iskelesi paketi çeşitli senaryolarda büyük fayda sağlar:

  • MVC'yi ilk kez ASP.NET öğreniyorsanız, size yararlı ve çalışan kodlar edinmenin hızlı bir yolunu sağladığından, gereksinimlerinize göre düzenleyip uyarlayabilirsiniz. Sizi boş bir sayfaya bakmanın ve nereden başlayacağınızı bilmiyor olmanın travmasından kurtarır!
  • ASP.NET MVC'yi iyi biliyorsanız ve şimdi nesne ilişkisel eşleyici, görünüm altyapısı, test kitaplığı vb. gibi yeni eklenti teknolojisini keşfediyorsanız, bu teknolojinin oluşturucusu bunun için bir iskele paketi de oluşturmuş olabilir.
  • Eğer çalışmalarınız sürekli olarak benzer sınıflar veya dosyalar oluşturmayı içeriyorsa, test fikstürleri, dağıtım betikleri veya ihtiyacınız olan her şeyi oluşturabilen özel iskelet oluşturucular yaratabilirsiniz. Ekibinizdeki herkes özel iskelelerinizi de kullanabilir.

MvcScaffolding'deki diğer özellikler şunlardır:

  • C# ve VB projeleri için destek
  • Razor ve ASPX görünüm altyapıları için destek
  • ASP.NET MVC bölgelerine yapı iskeleti oluşturmayı ve özel görünüm düzenleri/ana sayfalar kullanmayı destekler.
  • T4 şablonlarını düzenleyerek çıkışı kolayca özelleştirebilirsiniz
  • Özel PowerShell mantığı ve özel T4 şablonları kullanarak tamamen yeni iskeleler ekleyebilirsiniz. Bunlar (ve onlara verdiğiniz tüm özel parametreler) konsol sekme tamamlama listesinde otomatik olarak görünür.
  • Farklı teknolojiler için ek iskeleler içeren NuGet paketleri alabilir (örneğin, linq to SQL için artık bir kavram kanıtı vardır) ve bunları birlikte karıştırıp eşleştirebilirsiniz

ASP.NET MVC 3 Araçları Güncelleştirmesi, bu yapı iskelesi sistemi için aşağıdakiler gibi harika Visual Studio desteği içerir:

  • Denetleyici Ekle Penceresi artık Oluşturma, Okuma, Güncelleştirme ve Silme eylemleri ve bunlara karşılık gelen görünümler için kapsamlı ve otomatik iskelet oluşturmayı destekliyor. Varsayılan olarak, bu yapı, önce EF Code kullanarak veri erişim kodunun iskelesini oluşturur.
  • Denetleyici Ekle İletişim Kutusu, MvcScaffolding gibi NuGet paketleri aracılığıyla genişletilebilir yapı iskelelerini destekler. Bu, iletişim kutusuna özel iskeleler takmanıza olanak tanır ve bu sayede NHibernate gibi diğer veri erişim teknolojileri için iskeleler ve hatta bu kadar istekliyseniz ODBCDirect ile JET oluşturabilirsiniz!

ASP.NET MVC 3'teki yapı iskelesi hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:

HTML 5 Proje Şablonları

Yeni Proje iletişim kutusu, proje şablonlarının HTML 5 sürümlerini etkinleştir onay kutusunu içerir. Bu şablonlar, alt düzey tarayıcılarda HTML 5 ve CSS 3 için uyumluluk desteği sağlamak için Modernizr 1.7'yi kullanabilir.

Razor Görünüm Altyapısı

ASP.NET MVC 3, aşağıdaki avantajları sunan Razor adlı yeni bir görünüm altyapısıyla birlikte gelir:

  • Razor söz dizimi, en az sayıda tuş vuruşu gerektiren temiz ve kısadır.
  • Razor, kısmen C# ve Visual Basic gibi mevcut dilleri temel aldığından öğrenmesi kolaydır.
  • Visual Studio, Razor söz dizimi için IntelliSense ve kod renklendirmesi içerir.
  • Razor görünümleri, uygulamayı çalıştırmanıza veya bir web sunucusu başlatmanıza gerek kalmadan birim testi yapılabilir.

Bazı yeni Razor özellikleri şunlardır:

  • @model görünüme geçirilen türü belirtmek için söz dizimi.
  • @* *@ açıklama söz dizimi.
  • Sitenin tamamı için varsayılan değerleri (örneğin layoutpage) bir kez belirtme özelliği.
  • Html.Raw HTML kodlaması olmadan metin görüntüleme yöntemi.
  • Birden çok görünüm arasında kod paylaşma desteği (_viewstart.cshtml veya _viewstart.vbhtml dosyaları).

Razor ayrıca aşağıdakiler gibi yeni HTML yardımcıları da içerir:

  • Chart. ASP.NET 4'teki grafik denetimiyle aynı özellikleri sunan bir grafik oluşturur.
  • WebGrid. Sayfalama ve sıralama işlevleriyle birlikte bir veri kılavuzu oluşturur.
  • Crypto. Düzgün şekilde tuzlanmış ve karmalanmış parolalar oluşturmak için karma algoritmaları kullanır.
  • WebImage. Bir görüntüyü işler.
  • WebMail. E-posta iletisi gönderir.

Razor hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:

Birden Çok Görünüm Motoru desteği

ASP.NET MVC 3'teki Görünüm Ekle iletişim kutusu, çalışmak istediğiniz görünüm altyapısını seçmenize olanak tanır ve Yeni Proje iletişim kutusu bir proje için varsayılan görünüm altyapısını belirtmenize olanak tanır. Web Forms görünüm altyapısını (ASPX), Razor'ı veya Spark, NHaml veya NDjango gibi açık kaynak görünüm altyapısını seçebilirsiniz.

Denetleyici Geliştirmeleri

Genel Eylem Filtreleri

Bazen bir eylem yöntemi çalışmadan önce veya bir eylem yöntemi çalıştırıldıktan sonra mantık gerçekleştirmek isteyebilirsiniz. ASP.NET MVC 2, bunu desteklemek için eylem filtreleri sağladı. Eylem filtreleri, belirli denetleyici eylem yöntemlerine eylem öncesi ve eylem sonrası davranış eklemek için bildirim temelli bir araç sağlayan özel özniteliklerdir. Ancak bazı durumlarda, tüm eylem yöntemleri için geçerli olan eylem öncesi veya eylem sonrası davranışı belirtmek isteyebilirsiniz. MVC 3, genel filtreleri koleksiyona ekleyerek belirtmenize GlobalFilters olanak tanır. Genel eylem filtreleri hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:

Yeni "ViewBag" Özelliği

MVC 2 denetleyicileri, ViewData özelliğiyle geç bağlanan sözlük API'sini kullanarak bir görünüm şablonuna veri geçirmenizi sağlayan bir özelliği destekler. MVC 3'te, aynı amaca ulaşmak için ViewBag özelliğini kullanarak biraz daha basit bir söz dizimi de kullanabilirsiniz. Örneğin, ViewData["Message"]="text" yerine ViewBag.Message="text" yazabilirsiniz. ViewBag özelliğini kullanmak için kesin tür belirtilmiş herhangi bir sınıf tanımlamanız gerekmez. Bu dinamik bir özellik olduğundan, bunun yerine yalnızca özellikleri alabilir veya ayarlayabilirsiniz ve bunları çalışma zamanında dinamik olarak çözümler. Dahili olarak, ViewBag özellikler sözlükte ad/değer çiftleri ViewData olarak depolanır. (Not: MVC 3'ün çoğu yayın öncesi sürümünde, ViewBag özelliğine ViewModel adı verilmişti.)

Yeni "ActionResult" Türleri

Aşağıdaki ActionResult türler ve buna karşılık gelen yardımcı yöntemler MVC 3'te yeni veya geliştirilmiştir:

  • HttpNotFoundResult. İstemciye 404 HTTP durum kodu döndürür.
  • RedirectResult. Boole parametresine bağlı olarak geçici bir yeniden yönlendirme (HTTP 302 durum kodu) veya kalıcı yeniden yönlendirme (HTTP 301 durum kodu) döndürür. Bu değişiklikle birlikte , Denetleyici sınıfı artık kalıcı yeniden yönlendirmeler gerçekleştirmek için üç yönteme sahiptir: RedirectPermanent, RedirectToRoutePermanentve RedirectToActionPermanent. Bu yöntemler, Permanent özelliği true olarak ayarlanmış bir RedirectResult örneğini döndürür.
  • HttpStatusCodeResult. Kullanıcı tarafından belirtilen http durum kodunu döndürür.

JavaScript ve Ajax Geliştirmeleri

MVC 3'teki Ajax ve doğrulama yardımcıları varsayılan olarak göze çarpmayan bir JavaScript yaklaşımı kullanır. Göze çarpmayan JavaScript, HTML'ye satır içi JavaScript eklemekten kaçınıyor. Bu, HTML'nizi daha küçük ve daha az karmaşık hale getirir ve JavaScript kitaplıklarını değiştirmenizi veya özelleştirmenizi kolaylaştırır. MVC 3'teki doğrulama yardımcıları da eklentiyi jQueryValidate varsayılan olarak kullanır. MVC 2 davranışını istiyorsanız, web.config dosya ayarı kullanarak göze çarpmayan JavaScript'i devre dışı bırakabilirsiniz. JavaScript ve Ajax geliştirmeleri hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:

Client-Side Doğrulama Varsayılan Olarak Etkinleştirildi

MVC'nin önceki sürümlerinde, istemci tarafı doğrulamayı Html.EnableClientValidation etkinleştirmek için bir görünümden yöntemini açıkça çağırmanız gerekir. MVC 3'te istemci tarafı doğrulaması varsayılan olarak etkinleştirildiğinden bu artık gerekli değildir. ( web.config dosyasındaki bir ayarı kullanarak bunu devre dışı bırakabilirsiniz.)

İstemci tarafı doğrulamanın çalışması için yine de sitenizdeki uygun jQuery ve jQuery Doğrulama kitaplıklarına başvurmanız gerekir. Bu kitaplıkları kendi sunucunuzda barındırabilir veya Microsoft veya Google'ın CDN'leri gibi bir içerik teslim ağından (CDN) başvurabilirsiniz.

Uzak Doğrulayıcı

ASP.NET MVC 3, jQuery Doğrulama eklentisinin uzak doğrulayıcı desteğinden yararlanmanızı sağlayan yeni RemoteAttribute sınıfını destekler. Bu, istemci tarafı doğrulama kitaplığının yalnızca sunucu tarafında yapabilen doğrulama mantığı gerçekleştirmek için sunucuda tanımladığınız özel bir yöntemi otomatik olarak çağırmasını sağlar.

Aşağıdaki örnekte, Remote özniteliği, istemci doğrulamasının UserName alanını doğrulamak için UsersController sınıfındaki UserNameAvailable adlı bir eylemi çağıracağını belirtir.

public class User 
{
    [Remote("UserNameAvailable", "Users")]
    public string UserName { get; set; }
}

Aşağıdaki örnekte ilgili denetleyici gösterilmektedir.

public class UsersController 
{ 
    public bool UserNameAvailable(string username) 
    { 
        if(MyRepository.UserNameExists(username)) 
        { 
            return "false"; 
        } 
        return "true"; 
    } 
}

Özniteliği Remote nasıl kullanacağınız hakkında daha fazla bilgi için MSDN kitaplığındaki How to: Implement Remote Validation in ASP.NET MVC başlığına bakın.

JSON Bağlama Desteği

ASP.NET MVC 3, eylem yöntemlerinin JSON ile kodlanmış verileri almasını ve bunu action-method parametrelerine model bağlamasını sağlayan yerleşik JSON bağlama desteği içerir. Bu özellik, istemci şablonları ve veri bağlama içeren senaryolarda kullanışlıdır. (İstemci şablonları, istemcide yürütülen şablonları kullanarak tek bir veri öğesini veya veri öğesi kümesini biçimlendirmenizi ve görüntülemenizi sağlar.) MVC 3, JSON verilerini gönderip alan sunucudaki eylem yöntemleriyle istemci şablonlarını kolayca bağlamanızı sağlar. JSON bağlama desteği hakkında daha fazla bilgi için Scott Guthrie'nin MVC 3 Preview blog gönderisininJavaScript ve AJAX Geliştirmeleri bölümüne bakın.

Model Doğrulama Geliştirmeleri

"DataAnnotations" Meta Veri Öznitelikleri

ASP.NET MVC 3 gibi DataAnnotationsmeta veri özniteliklerini desteklerDisplayAttribute.

"ValidationAttribute" Sınıfı

ValidationAttribute sınıfı, doğrulanan nesne gibi geçerli doğrulama bağlamı hakkında daha fazla bilgi sağlayan yeni IsValid bir aşırı yüklemeyi desteklemek için .NET Framework 4'te geliştirilmiştir. Bu, modelin başka bir özelliğine göre geçerli değeri doğrulayabileceğiniz daha zengin senaryolar sağlar. Örneğin, yeni CompareAttribute öznitelik bir modelin iki özelliğinin değerlerini karşılaştırmanıza olanak tanır. Aşağıdaki örnekte, özelliğin ComparePassword geçerli olması için alanıyla Password eşleşmesi gerekir.

public class User
{ 
    [Required]
    public string Password { get; set; } 
    [Required, Compare("Password")] 
    public string ComparePassword { get; set; } 
}

Doğrulama Arabirimleri

IValidatableObject arabirimi model düzeyinde doğrulama gerçekleştirmenize olanak tanır ve genel modelin durumuna veya model içindeki iki özellik arasında belirli doğrulama hata iletileri sağlamanıza olanak tanır. MVC 3 artık model bağlama sırasında arabirimden IValidatableObject hataları alır ve yerleşik HTML formu yardımcılarını kullanarak bir görünümdeki etkilenen alanları otomatik olarak bayraklar veya vurgular.

IClientValidatable arabirimi, ASP.NET MVC'nin çalışma zamanında bir doğrulayıcının istemci doğrulama desteği olup olmadığını bulmasına olanak tanır. Bu arabirim, çeşitli doğrulama çerçeveleriyle tümleştirilebileceği şekilde tasarlanmıştır.

Doğrulama arabirimleri hakkında daha fazla bilgi için Scott Guthrie'nin MVC 3 Preview blog gönderisininModel Doğrulama Geliştirmeleri bölümüne bakın. (Ancak, blogdaki "IValidateObject" başvurusunun "IValidatableObject" olması gerektiğini unutmayın.)

Bağımlılık Enjeksiyonu geliştirmeleri

ASP.NET MVC 3, Bağımlılık Ekleme (DI) uygulama ve Bağımlılık Ekleme veya Denetim Ters Çevirme (IOC) kapsayıcılarıyla tümleştirme için daha iyi destek sağlar. DI desteği aşağıdaki alanlara eklenmiştir:

  • Denetleyiciler (denetleyici fabrikalarını kaydetme ve enjekte etme, denetleyicileri enjekte etme).
  • Görünümler (görünüm altyapılarını kaydetme ve ekleme, görünüm sayfalarına bağımlılık ekleme).
  • Eylem filtreleri (filtreleri bulma ve ekleme).
  • Model bağlayıcıları (kaydetme ve ekleme).
  • Model doğrulama sağlayıcıları (kaydetme ve ekleme).
  • Model meta veri sağlayıcıları (kaydetme ve ekleme).
  • Değer sağlayıcıları (kaydetme ve ekleme).

MVC 3 , Common Service Locator kütüphanesini ve bu kütüphanenin IServiceLocator arabirimini destekleyen tüm DI konteynerlerini destekler. Ayrıca DI çerçevelerini tümleştirmeyi kolaylaştıran yeni IDependencyResolver bir arabirimi de destekler.

MVC 3'teki DI hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:

Diğer Yeni Özellikler

NuGet Tümleştirmesi

ASP.NET MVC 3, kurulumu kapsamında NuGet'i otomatik olarak yükler ve etkinleştirir. NuGet, projelerinizde .NET kitaplıklarını ve araçlarını bulmayı, yüklemeyi ve kullanmayı kolaylaştıran ücretsiz bir açık kaynak paket yöneticisidir. Tüm Visual Studio proje türleriyle (ASP.NET Web Forms ve ASP.NET MVC dahil) çalışır.

NuGet, açık kaynak projeleri (örneğin, Moq, NHibernate, Ninject, StructureMap, NUnit, Windsor, RhinoMocks ve Elmah gibi projeler) tutan geliştiricilerin kitaplıklarını paketleyip çevrimiçi bir galeriye kaydetmesini sağlar. Daha sonra bu kitaplıklardan birini kullanmak isteyen .NET geliştiricilerinin paketi bulması ve üzerinde çalıştıkları projelere yüklemesi kolaydır.

ASP.NET 3 Araç Güncelleştirmesi ile proje şablonları önceden yüklenmiş NuGet paketlerini içeren JavaScript kitaplıklarını içerir, bu nedenle NuGet aracılığıyla güncelleştirilebilir. Entity Framework Code First, NuGet paketi olarak da önceden yüklenir.

NuGet hakkında daha fazla bilgi için NuGet belgelerine bakın.

Sayfa Parçası Çıktı Önbelleğe Alma

ASP.NET MVC, sürüm 1'den bu yana tam sayfa yanıtlarının çıkış önbelleğe alınmasını desteklemiştir. MVC 3 ayrıca kısmi sayfa çıkış önbelleğe almayı da destekler ve bu sayede yanıtların bölgelerini veya parçalarını kolayca önbelleğe alırsınız. Önbelleğe alma hakkında daha fazla bilgi için, Scott Guthrie'nin MVC 3 sürüm adayındaki blog gönderisininKısmi Sayfa Çıktısını Önbelleğe Alma bölümüne ve MVC 3 Sürüm Notları'nınAlt Eylem Çıktısını Önbelleğe Alma bölümüne bakın.

İstek Doğrulaması Üzerinde Ayrıntılı Denetim

ASP.NET MVC, XSS ve HTML ekleme saldırılarına karşı otomatik olarak korumaya yardımcı olan yerleşik istek doğrulamasına sahiptir. Ancak, bazen kullanıcıların HTML içeriği göndermesine izin vermek (örneğin, blog girdilerinde veya CMS içeriğinde) gibi istek doğrulamasını açıkça devre dışı bırakmak istersiniz. Artık model bağlama sırasında özellik başına istek doğrulamasını devre dışı bırakmak için modellere AllowHtml özniteliği ekleyebilir veya modelleri görüntüleyebilirsiniz. İstek doğrulaması hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:

Genişletilebilir "Yeni Proje" İletişim Kutusu

ASP.NET MVC 3'te Yeni Proje iletişim kutusuna proje şablonları, görünüm altyapıları ve birim testi proje çerçeveleri ekleyebilirsiniz.

Şablon yapı iskelesi geliştirmeleri

ASP.NET MVC 3 yapı iskelesi şablonları, modellerdeki birincil anahtar özelliklerini tanımlama ve bunları MVC'nin önceki sürümlerinden uygun şekilde işleme konusunda daha iyi bir iş sunar. (Örneğin, iskelet şablonları artık birincil anahtarın düzenlenebilir bir form alanı olarak oluşturulmadığından emin oluyor.)

Varsayılan olarak, Oluşturma ve Düzenleme şablonları artık Html.EditorFor yardımcısını Html.TextBoxFor yardımcısı yerine kullanır. Bu, Görünüm Ekle iletişim kutusu bir görünüm oluşturduğunda modeldeki meta veriler için veri ek açıklaması öznitelikleri biçimindeki desteği geliştirir.

"Html.LabelFor" ve "Html.LabelForModel" için Yeni Aşırı Yüklemeler

Yeni yöntem aşırı yüklemeleri LabelFor ve LabelForModel yardımcı yöntemleri için eklendi. Yeni aşırı yüklemeler etiket metnini belirtmenize veya geçersiz kılmanıza olanak tanır.

Oturumsuz Denetleyici Desteği

ASP.NET MVC 3'te bir denetleyici sınıfının oturum durumunu kullanmasını isteyip istemediğinizi ve kullanıyorsanız oturum durumunun okuma/yazma veya salt okunur olması gerekip gerekmediğini belirtebilirsiniz. Oturumsuz denetleyici desteği hakkında daha fazla bilgi için bkz. MVC 3 Sürüm Notları.

Yeni "AdditionalMetadataAttribute" Sınıfı

Model özelliği için ModelMetadata.AdditionalValues sözlük nesnesine değer atamak üzere AdditionalMetadata özniteliğini kullanabilirsiniz. Örneğin, bir görünüm modelinin yalnızca yöneticiye görüntülenmesi gereken bir özelliği varsa, aşağıdaki örnekte gösterildiği gibi bu özelliğe ek açıklama ekleyebilirsiniz:

public class ProductViewModel 
{
    [AdditionalMetadata("AdminOnly", true)]
    public string RefundCode {get; set;}
}

Bu meta veriler, bir ürün görünümü modeli işlendiğinde tüm görüntüleme veya düzenleyici şablonlarının kullanımına sunulur. Meta veri bilgilerini yorumlamak size bağlı.

AccountController geliştirmeleri

İnternet proje şablonundaki AccountController büyük ölçüde geliştirilmiştir.

Yeni Intranet Proje Şablonu

Windows Kimlik Doğrulaması'nı etkinleştiren ve AccountController'ı kaldıran yeni bir Intranet Proje Şablonu eklenmiştir.