Catatan Rilis ASP.NET MVC 3

Gambaran Umum

Dokumen ini menjelaskan rilis ASP.NET MVC 3 RTM untuk Visual Studio 2010. ASP.NET MVC adalah kerangka kerja untuk mengembangkan aplikasi Web yang menggunakan pola Model-View-Controller (MVC). Alat penginstal ASP.NET MVC 3 mencakup komponen berikut:

  • ASP.NET komponen runtime MVC 3
  • ASP.NET alat MVC 3 Visual Studio 2010
  • ASP.NET komponen run-time Halaman Web
  • alat ASP.NET Web Pages Visual Studio 2010
  • Pengelola Paket Microsoft untuk .NET (NuGet)
  • Pembaruan untuk Visual Studio 2010 yang memungkinkan dukungan untuk sintaks Razor. (Untuk detailnya, lihat artikel KnowledgeBase 2483190.)

Set lengkap catatan rilis untuk setiap versi pra-rilis ASP.NET MVC 3 dapat ditemukan di situs web ASP.NET di URL berikut:

https://www.asp.net/learn/whitepapers/mvc3-release-notes

Catatan Penginstalan

Untuk menginstal ASP.NET MVC 3 RTM menggunakan Web Platform Installer (Web PI), kunjungi halaman berikut:

https://www.microsoft.com/web/gallery/install.aspx?appid=MVC3

Atau, Anda dapat mengunduh alat penginstal untuk ASP.NET MVC 3 RTM untuk Visual Studio 2010 dari halaman berikut:

https://go.microsoft.com/fwlink/?LinkID=208140

ASP.NET MVC 3 dapat diinstal dan dapat berjalan berdampingan dengan ASP.NET MVC 2.

Persyaratan Perangkat Lunak

Komponen run-time ASP.NET MVC 3 memerlukan perangkat lunak berikut:

  • .NET Framework versi 4.

    ASP.NET alat MVC 3 Visual Studio 2010 memerlukan perangkat lunak berikut:

  • Visual Studio 2010 atau Visual Web Developer 2010 Express.

Dokumentasi

Dokumentasi untuk ASP.NET MVC tersedia di situs Web MSDN di URL berikut:

https://go.microsoft.com/fwlink/?LinkId=205717

Tutorial dan informasi lain tentang ASP.NET MVC tersedia di halaman MVC situs Web ASP.NET di URL berikut:

https://www.asp.net/mvc/

Dukungan

Ini adalah rilis yang didukung penuh. Informasi tentang mendapatkan dukungan teknis dapat ditemukan di situs web Dukungan Microsoft.

Jangan ragu untuk memposting pertanyaan tentang rilis ini ke forum MVC ASP.NET, di mana anggota komunitas ASP.NET sering dapat memberikan dukungan informal:

https://forums.asp.net/1146.aspx

Memutakhirkan Proyek ASP.NET MVC 2 ke ASP.NET Pembaruan Alat MVC 3

ASP.NET MVC 3 dapat diinstal berdampingan dengan ASP.NET MVC 2 pada komputer yang sama, yang memberi Anda fleksibilitas dalam memilih kapan harus meningkatkan aplikasi ASP.NET MVC 2 ke ASP.NET MVC 3.

Untuk meningkatkan aplikasi ASP.NET MVC 2 yang ada secara manual ke versi 3, lakukan hal berikut:

  1. Buat proyek ASP.NET MVC 3 kosong baru di komputer Anda. Proyek ini akan berisi beberapa file yang diperlukan untuk peningkatan.

  2. Salin file berikut dari proyek MVC 3 ASP.NET ke lokasi yang sesuai dari proyek ASP.NET MVC 2 Anda. Anda harus memperbarui referensi apa pun ke pustaka jQuery untuk memperhitungkan nama file baru ( jQuery-1.5.1.js):

    • /Views/Web.config
    • /packages.config
    • /scripts/*.js
    • /Content/themes/*.*
  3. Salin folder paket di akar solusi proyek ASP.NET MVC 3 kosong ke akar solusi Anda, yang ada di direktori tempat file .sln solusi berada.

  4. Jika proyek MVC 2 ASP.NET Anda berisi area apa pun, salin file /Views/Web.config ke folder Tampilan dari setiap area.

  5. Dalam kedua file Web.config dalam proyek MVC 2 ASP.NET, cari dan ganti versi MVC ASP.NET secara global. Temukan hal berikut:

    System.Web.Mvc, Version=2.0.0.0
    

    Ganti dengan yang berikut ini:

    System.Web.Mvc, Version=3.0.0.0
    
  6. Di Penjelajah Solusi, hapus referensi ke System.Web.Mvc (yang menunjuk ke DLL dari versi 2), lalu tambahkan referensi ke System.Web.Mvc (v3.0.0.0).

  7. Tambahkan referensi ke System.Web.WebPages.dll dan System.Web.Helpers.dll. Rakitan ini terletak di folder berikut:

    • %ProgramFiles%\ Microsoft ASP.NET\ASP.NET MVC 3\Assembly
    • %ProgramFiles%\ Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblyes
  8. Di Penjelajah Solusi, klik kanan nama proyek dan pilih Bongkar Proyek. Kemudian klik kanan nama proyek lagi dan pilih Edit ProjectName.csproj.

  9. Temukan elemen ProjectTypeGuids dan ganti {F85E285D-A4E0-4152-9332-AB1D724D3325} dengan {E53F8FEA-EAE0-44A6-8774-FFD645390401}.

  10. Simpan perubahan, klik kanan proyek, lalu pilih Muat Ulang Proyek.

  11. Dalam file Web.config root aplikasi, tambahkan pengaturan berikut ke bagian rakitan .

    <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, 
         PublicKeyToken=31BF3856AD364E35" />
    
    <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral,
         PublicKeyToken=31BF3856AD364E35" />
    
  12. Jika proyek mereferensikan pustaka pihak ketiga yang dikompilasi menggunakan ASP.NET MVC 2, tambahkan elemen bindingRedirect yang disorot berikut ke file Web.config di akar aplikasi di bawah bagian konfigurasi :

    <runtime>
       <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
           <assemblyIdentity name="System.Web.Mvc"
               publicKeyToken="31bf3856ad364e35"/>
           <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0"/>
         </dependentAssembly>
       </assemblyBinding>
    </runtime>
    

Perubahan dalam pembaruan alat MVC 3 ASP.NET

Bagian ini menjelaskan perubahan yang dibuat dalam rilis Pembaruan Alat MVC 3 ASP.NET sejak rilis ASP.NET MVC 3 RTM.

Kotak dialog "Tambahkan Pengontrol" sekarang dapat mengontrol perancah dengan tampilan dan kode akses data

Perancah adalah cara untuk menghasilkan pengontrol dan tampilan dengan cepat untuk aplikasi Anda. Setelah kode dibuat, Anda dapat mengeditnya untuk memenuhi persyaratan proyek Anda.

Untuk meluncurkan kotak dialog Tambahkan Pengontrol di ASP.NET MVC 3, klik kanan folder Pengontrol di Penjelajah Solusi, klik Tambahkan, lalu klik Pengontrol. Kotak dialog telah ditingkatkan untuk menawarkan opsi perancah tambahan.

Cuplikan layar kotak dialog Tambahkan Pengontrol.

Ada tiga templat perancah yang tersedia secara default.

Pengontrol Kosong

Templat ini menghasilkan file pengontrol kosong. Templat ini setara dengan tidak memeriksa Tambahkan tindakan untuk membuat, mengedit, detail, menghapus skenario di versi ASP.NET MVC sebelumnya. Jika Anda memilih ini, tidak ada opsi lebih lanjut yang tersedia.

Pengontrol dengan tindakan baca/tulis kosong

Templat ini menghasilkan file pengontrol yang memiliki semua metode tindakan yang diperlukan tetapi tidak ada kode implementasi dalam metode . Templat ini setara dengan memeriksa Tambahkan tindakan untuk membuat, mengedit, merinci, menghapus skenario dalam versi ASP.NET MVC sebelumnya. Jika Anda memilih ini, tidak ada opsi lebih lanjut yang tersedia.

Pengontrol dengan tindakan baca/tulis dan tampilan, menggunakan Kerangka Kerja Entitas

Templat ini memungkinkan Anda membuat antarmuka pengguna entri data yang berfungsi dengan cepat. Ini menghasilkan kode yang menangani berbagai persyaratan dan skenario umum, seperti berikut:

  • Akses data. Kode yang dihasilkan membaca dan menulis entitas dalam database. Ini berfungsi dengan pendekatan Entity Framework Code First jika Anda memilih kelas konteks data yang ada atau jika Anda membiarkan templat menghasilkan kelas DbContext baru. Ini juga berfungsi dengan pendekatan Entity Framework Database First atau Model First jika Anda memilih kelas ObjectContext yang ada.

  • Validasi. Kode yang dihasilkan menggunakan ASP.NET fitur pengikatan model MVC dan metadata sehingga pengiriman formulir divalidasi sesuai dengan aturan yang dideklarasikan pada kelas model Anda. Ini termasuk aturan validasi bawaan, seperti atribut Required dan StringLength , dan aturan validasi kustom.

  • Hubungan satu ke banyak. Jika Anda menentukan hubungan kunci asing satu-ke-banyak antara kelas model Anda, kode yang dihasilkan akan menghasilkan daftar drop-down untuk memilih entitas terkait. Misalnya, Anda dapat menentukan kelas model berikut mengikuti konvensi Kode Kerangka Kerja Entitas Pertama:

    public class Product
    {
         public int ProductId { get; set; }
         [Required]
         public string Name { get; set; }
    
         // Product belongs to Category
         public int CategoryId { get; set; }
         public virtual Category Category { get; set; }
    }
    public class Category
    {
         public int CategoryId { get; set; }
         [Required]
         public string Name { get; set; }
    }
    

    Ketika Anda kemudian membuat perancah pengontrol untuk kelas Produk , tampilannya akan memungkinkan pengguna untuk memilih objek Kategori untuk setiap instans Produk .

    Templat ini mengaktifkan opsi tambahan dalam kotak dialog Tambahkan Pengontrol . Untuk kelas Model, Anda dapat memilih kelas model apa pun dalam solusi Anda, yang menentukan jenis data yang dapat dibuat atau diedit pengguna:

  • Jika Anda ingin menggunakan Kode Kerangka Kerja Entitas Terlebih Dahulu, Anda dapat memilih kelas model apa pun.

  • Jika Anda menggunakan Database Kerangka Kerja Entitas Model Pertama atau Kerangka Kerja Entitas Terlebih Dahulu, pastikan untuk memilih kelas entitas yang ditentukan dalam model konseptual Anda.

Untuk kelas Konteks Data, Anda dapat membuat pilihan ini:

  • Jika Anda ingin menggunakan Kode Terlebih Dahulu dan tidak memiliki kelas konteks data yang ada, pilih **Konteks data baru **. Kelas konteks data kemudian akan dibuat untuk Anda.
  • Jika Anda ingin menggunakan Kode Terlebih Dahulu dan memiliki kelas konteks data yang sudah ada, pilih di sini. Ini akan diperbarui untuk mempertahankan kelas model yang telah Anda pilih.
  • Jika Anda menggunakan Database First atau Model First, pilih kelas konteks objek Anda di sini.

Untuk Tampilan, pilih mesin tampilan yang ingin Anda gunakan, atau pilih Tidak Ada jika Anda tidak ingin membuat perancah tampilan apa pun.

Anda dapat memilih Opsi Tingkat Lanjut untuk menentukan opsi lebih lanjut untuk tampilan yang dihasilkan. Misalnya, Anda dapat memilih tata letak atau halaman master untuk digunakan.

Penyempurnaan Kotak Dialog "Proyek Baru ASP.NET MVC 3"

Kotak dialog yang Anda gunakan untuk membuat proyek ASP.NET MVC 3 baru menyertakan beberapa penyempurnaan, seperti yang tercantum di bawah ini.

Cuplikan layar kotak dialog proyek baru. Ikon Aplikasi Intranet dan kotak centang Gunakan markup semantik H T M L 5 disorot.

Templat "Proyek Intranet" Baru

Daftar Templat Proyek menyertakan templat Aplikasi Intranet baru. Templat ini berisi pengaturan untuk membangun aplikasi web menggunakan autentikasi Windows alih-alih autentikasi formulir. Karena aplikasi intranet memerlukan beberapa pengaturan IIS yang tidak dapat dienkapsulasi dalam templat proyek, templat menyertakan file readme dengan instruksi tentang cara membuat templat proyek berfungsi di IIS. Dokumentasi untuk templat Aplikasi Intranet baru tersedia di situs web MSDN di URL berikut:

https://msdn.microsoft.com/library/gg703322(VS.98).aspx

Templat proyek sekarang diaktifkan HTML5

Kotak dialog proyek baru sekarang berisi opsi untuk menambahkan fitur khusus HTML5 ke templat proyek. Memilih opsi menyebabkan tampilan dihasilkan yang berisi elemen HTML5 <header>, , <footer>dan <navigation> baru.

Perhatikan bahwa versi browser yang lebih lama tidak mendukung tag khusus HTML5. Untuk mengatasi batasan ini, templat proyek HTML5 menyertakan referensi ke pustaka Modernizr. (Lihat bagian berikutnya.)

Templat proyek sekarang menyertakan Modernizr 1.7

Modernizr adalah pustaka JavaScript yang memungkinkan dukungan untuk CSS 3 dan HTML5 di browser yang belum mendukung fitur-fitur ini. Pustaka ini disertakan sebagai paket NuGet yang telah diinstal sebelumnya dalam templat untuk proyek ASP.NET MVC 3. Untuk informasi selengkapnya tentang Modernizr, lihat http://www.modernizr.com/.

Templat proyek mencakup versi jQuery, jQuery UI, dan jQuery Validation yang diperbarui

Templat proyek sekarang menyertakan versi skrip jQuery berikut:

  • jQuery 1.5.1
  • Validasi jQuery 1.8
  • jQuery UI 1.8.11

Pustaka ini disertakan sebagai paket NuGet yang telah diinstal sebelumnya.

Templat proyek sekarang menyertakan ADO.NET Entity Framework 4.1 sebagai paket NuGet yang telah diinstal sebelumnya

ADO.NET Entity Framework 4.1 menyertakan fitur Code First. Code First adalah pola pengembangan baru untuk ADO.NET Entity Framework yang menyediakan alternatif untuk pola Database First dan Model First yang ada.

Code First difokuskan untuk menentukan model Anda menggunakan kelas POCO ("objek CLR lama biasa") yang ditulis dalam Visual Basic atau C#. Kelas-kelas ini kemudian dapat dipetakan ke database yang ada atau digunakan untuk menghasilkan skema database. Konfigurasi tambahan dapat disediakan menggunakan atribut DataAnnotations atau menggunakan API fasih.

Dokumentasi untuk menggunakan Code Firstwith ASP.NET MVC tersedia di situs web ASP.NET di URL berikut:

https://www.asp.net/mvc/tutorials/getting-started-with-mvc3-part1-cs https://www.asp.net/entity-framework/tutorials/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

Templat proyek mencakup pustaka JavaScript sebagai paket NuGet yang telah diinstal sebelumnya

Saat Anda membuat proyek ASP.NET MVC 3 baru, proyek menyertakan file JavaScript yang disebutkan sebelumnya (misalnya, pustaka Modernizr) dengan menginstalnya menggunakan NuGet alih-alih secara langsung menambahkan skrip ke folder Skrip dalam konten templat proyek. Ini memungkinkan Anda menggunakan NuGet untuk memperbarui skrip ke versi terbaru saat versi baru skrip dirilis.

Misalnya, mengingat frekuensi rilis jQuery baru, versi jQuery yang disertakan dalam templat proyek akan kedaluarsa. Namun, karena jQuery disertakan sebagai paket NuGet yang diinstal, Anda akan diberi tahu dalam kotak dialog NuGet ketika versi jQuery yang lebih baru tersedia.

Karena jQuery menyertakan nomor versi dalam nama file, memperbarui jQuery ke versi terbaru juga memerlukan pembaruan tag yang mereferensikan <script> file jQuery untuk menggunakan nama file baru. Pustaka skrip lain yang disertakan tidak menyertakan nomor versi dalam nama skrip, sehingga dapat lebih mudah diperbarui ke versi terbarunya.

Masalah yang Diketahui di ASP.NET MVC 3

  • Dalam beberapa kasus, penginstalan mungkin gagal dengan pesan kesalahan "Penginstalan gagal dengan kode kesalahan (0x80070643)". Untuk informasi tentang cara mengatasi masalah ini, lihat artikel KnowledgeBase 2531566.
  • Perancah untuk menambahkan pengontrol tidak merancang entitas yang memanfaatkan dukungan pewarisan entitas dalam Kerangka Kerja Entitas. Misalnya, mengingat kelas Orang dasar yang diwarisi oleh kelas Siswa , perancah kelas Siswa akan menghasilkan kode yang dihasilkan yang tidak dikompilasi.
  • Membuat proyek ASP.NET MVC 3 baru dalam folder solusi menyebabkan kesalahan NullReferenceException . Solusinya adalah membuat proyek ASP.NET MVC 3 di akar solusi dan kemudian memindahkannya ke folder solusi.
  • Sintaks IntelliSense for Razor tidak berfungsi saat ReSharper diinstal. Jika Anda menginstal ReSharper dan ingin memanfaatkan dukungan Razor IntelliSense di ASP.NET MVC 3, lihat entri Razor Intellisense dan ReSharper di blog Hadi Hariri, yang membahas cara untuk menggunakannya bersama-sama hari ini.
  • Selama penginstalan, kotak dialog penerimaan EULA menampilkan ketentuan lisensi di jendela yang lebih kecil dari yang diinginkan.
  • Saat Anda mengedit tampilan Razor (.cshtml atau .file vbhtml ), tampilan. ASP.NET MVC 3 tidak menyertakan cuplikan apa pun untuk tampilan Razor.. aspxpilih cuplikan kode untuk ASP.NET MVC akan menampilkan cuplikan untuk
  • Jika Anda menginstal ASP.NET MVC 3 untuk Visual Web Developer Express di komputer tempat Visual Studio tidak diinstal, dan kemudian menginstal Visual Studio, Anda harus menginstal ulang ASP.NET MVC 3. Komponen berbagi Visual Studio dan Visual Web Developer Express yang ditingkatkan oleh penginstal ASP.NET MVC 3. Masalah yang sama berlaku jika Anda menginstal ASP.NET MVC 3 untuk Visual Studio di komputer yang tidak memiliki Visual Web Developer Express lalu menginstal Visual Web Developer Express.

Perubahan ASP.NET MVC 3 RTM

Bagian ini menjelaskan perubahan dan perbaikan bug yang dilakukan dalam rilis MVC 3 RTM ASP.NET sejak rilis RC2.

Perubahan: Memperbarui versi UI jQuery ke 1.8.7

Templat proyek MVC ASP.NET untuk Visual Studio diperbarui untuk menyertakan versi terbaru pustaka UI jQuery. Templat juga menyertakan kumpulan file sumber daya minimal yang diperlukan oleh UI jQuery, seperti CSS terkait dan file gambar.

Ubah: Mengubah ModelMetadataProvider default kembali ke DataAnnotationsModelMetadataProvider

Rilis RC2 ASP.NET MVC 3 memperkenalkan kelas CachedDataAnnotationsMetadataProvider yang menyediakan penembolokan di atas kelas DataAnnotationsModelMetadataProvider yang ada sebagai peningkatan performa. Namun, beberapa bug dilaporkan dengan implementasi ini, sehingga perubahan telah dikembalikan dan dipindahkan ke proyek MVC Futures, yang tersedia di ASP.NET WebStack.

Diperbaiki: Menempelkan bagian ekspresi Razor yang berisi spasi kosong yang mengakibatkannya dibalik

Dalam versi pra-rilis ASP.NET MVC 3, saat Anda menempelkan bagian ekspresi Razor yang berisi spasi kosong ke dalam file Razor, ekspresi yang dihasilkan akan dibalik. Misalnya, pertimbangkan blok kode Razor berikut:

@SomeMethod("first param",
100)
@AnotherMethod()

Jika Anda memilih teks "param pertama" dalam metode pertama dan menempelkannya sebagai argumen ke metode kedua, hasilnya adalah sebagai berikut:

@AnotherMethod(param""first)

Perilaku yang benar adalah bahwa operasi tempel harus menghasilkan hal berikut:

@AnotherMethod("first param")

Masalah ini telah diperbaiki dalam rilis RTM sehingga ekspresi dipertahankan dengan benar selama operasi tempel.

Diperbaiki: Mengganti nama file Razor yang dibuka di editor menonaktifkan pewarnaan sintaks dan IntelliSense

Mengganti nama file Razor menggunakan Penjelajah Solusi saat file dibuka di jendela editor menyebabkan penyorotan sintaks dan IntelliSense berhenti bekerja untuk file tersebut. Ini telah diperbaiki sehingga penyorotan dan IntelliSense dipertahankan setelah penggantian nama.

Masalah umum untuk ASP.NET MVC 3 RTM

  • Jika Anda menutup Visual Studio 2010 SP1 Beta saat Konsol Manajer Paket NuGet terbuka, Visual Studio mengalami crash dan mencoba memulai ulang. Ini akan diperbaiki dalam rilis RTM Visual Studio 2010 SP1.
  • Penginstal ASP.NET MVC 3 hanya dapat menginstal versi awal manajer paket NuGet. Setelah Anda menginstal versi awal, NuGet dapat diinstal dan diperbarui menggunakan Visual Studio Extension Manager. Jika Anda sudah menginstal NuGet, buka Visual Studio Extension Gallery untuk memperbarui ke versi terbaru NuGet.
  • Membuat proyek ASP.NET MVC 3 baru dalam folder solusi menyebabkan kesalahan NullReferenceException . Solusinya adalah membuat proyek ASP.NET MVC 3 di akar solusi dan kemudian memindahkannya ke folder solusi.
  • Penginstal mungkin membutuhkan waktu lebih lama daripada versi MVC ASP.NET sebelumnya untuk diselesaikan. Ini karena memperbarui komponen Visual Studio 2010.
  • Sintaks IntelliSense for Razor tidak berfungsi saat ReSharper diinstal. Jika Anda menginstal ReSharper dan ingin memanfaatkan dukungan Razor IntelliSense di ASP.NET MVC 3, lihat entri Razor Intellisense dan ReSharper di blog Hadi Hariri, yang membahas cara untuk menggunakannya bersama-sama hari ini.
  • Tampilan CCSHTML dan VBHTML yang dibuat dengan versi Beta ASP.NET MVC 3 tidak memiliki tindakan build yang ditetapkan dengan benar, dengan hasil bahwa jenis tampilan ini dihilangkan saat proyek diterbitkan. Nilai Tindakan Build untuk file-file ini harus diatur ke "Konten". ASP.NET MVC 3 RTM memperbaiki masalah ini untuk file baru, tetapi tidak memperbaiki pengaturan untuk file yang ada untuk proyek yang dibuat dengan versi prarilis.
  • Cuplikan layar kotak dialog properti dengan menu tindakan build terbuka. Opsi konten dipilih.
  • Selama penginstalan, kotak dialog penerimaan EULA menampilkan ketentuan lisensi di jendela yang lebih kecil dari yang diinginkan.
  • Saat Anda mengedit tampilan Razor (file.cshtml), item menu Buka Pengontrol di Visual Studio tidak akan tersedia, dan tidak ada cuplikan kode.
  • Jika Anda menginstal ASP.NET MVC 3 untuk Visual Web Developer Express di komputer tempat Visual Studio tidak diinstal, dan kemudian menginstal Visual Studio, Anda harus menginstal ulang ASP.NET MVC 3. Komponen berbagi Visual Studio dan Visual Web Developer Express yang ditingkatkan oleh penginstal ASP.NET MVC 3. Masalah yang sama berlaku jika Anda menginstal ASP.NET MVC 3 untuk Visual Studio di komputer yang tidak memiliki Visual Web Developer Express lalu menginstal Visual Web Developer Express.

Perubahan Mencolok di ASP.NET MVC 3

  • Dalam versi ASP.NET MVC sebelumnya, filter tindakan dibuat per permintaan kecuali dalam beberapa kasus. Perilaku ini tidak pernah merupakan perilaku yang dijamin tetapi hanya detail implementasi dan kontrak untuk filter adalah mempertimbangkannya tanpa status. Dalam ASP.NET MVC 3, filter di-cache secara lebih agresif. Oleh karena itu, filter tindakan kustom apa pun yang menyimpan status instans yang tidak benar mungkin rusak.
  • Urutan eksekusi untuk filter pengecualian telah berubah untuk filter pengecualian yang memiliki nilai Pesanan yang sama. Dalam ASP.NET MVC 2 dan yang lebih lama, filter pengecualian pada pengontrol yang memiliki nilai Pesanan yang sama dengan yang ada pada metode tindakan dijalankan sebelum filter pengecualian pada metode tindakan. Ini biasanya akan terjadi ketika filter pengecualian diterapkan tanpa nilai Pesanan yang ditentukan. Dalam ASP.NET MVC 3, urutan ini telah dibalik sehingga handler pengecualian yang paling spesifik dijalankan terlebih dahulu. Seperti pada versi sebelumnya, jika properti Pesanan ditentukan secara eksplisit, filter dijalankan dalam urutan yang ditentukan.
  • Properti baru bernama FileExtensions ditambahkan ke kelas dasar VirtualPathProviderViewEngine . Saat ASP.NET mencari tampilan menurut jalur (bukan berdasarkan nama), hanya tampilan dengan ekstensi file yang terkandung dalam daftar yang ditentukan oleh properti baru ini yang dipertimbangkan. Ini adalah perubahan yang melanggar dalam aplikasi di mana penyedia build kustom terdaftar untuk mengaktifkan ekstensi file kustom untuk tampilan Formulir Web dan di mana penyedia mereferensikan tampilan tersebut dengan menggunakan jalur lengkap daripada nama. Solusinya adalah memodifikasi nilai properti FileExtensions untuk menyertakan ekstensi file kustom.
  • Implementasi pabrik pengontrol kustom yang secara langsung mengimplementasikan antarmuka IControllerFactory harus menyediakan implementasi metode GetControllerSessionBehavior baru yang ditambahkan ke antarmuka dalam rilis ini. Secara umum, disarankan agar Anda tidak mengimplementasikan antarmuka ini secara langsung dan sebaliknya mendapatkan kelas Anda dari DefaultControllerFactory.

Perubahan ASP.NET MVC 3 RC2

Bagian ini menjelaskan perubahan (fitur baru dan perbaikan bug) yang dibuat dalam rilis ASP.NET MVC 3 RC2 sejak rilis RC.

Templat Proyek Diubah untuk Menyertakan jQuery 1.4.4, jQuery Validation 1.7, dan jQuery UI 1.8.6

Templat proyek untuk ASP.NET MVC 3 sekarang menyertakan versi terbaru jQuery, jQuery Validation, dan jQuery UI. jQuery UI adalah tambahan baru untuk templat proyek dan menyediakan widget antarmuka pengguna yang berguna. Untuk informasi selengkapnya tentang UI jQuery, kunjungi beranda mereka: http://jqueryui.com/.

Menambahkan Kelas "AdditionalMetadataAttribute"

Anda dapat menggunakan kelas AdditionalMetadataAttribute untuk mengisi kamus ModelMetadata.AdditionalValues untuk properti model.

Misalnya, model tampilan memiliki properti yang harus ditampilkan hanya kepada administrator. Model tersebut dapat diannotasikan dengan atribut baru menggunakan AdminOnly sebagai kunci dan true sebagai nilai, seperti dalam contoh berikut:

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

Metadata ini tersedia untuk templat tampilan atau editor apa pun saat model tampilan produk dirender. Terserah Anda sebagai pengembang aplikasi untuk menginterpretasikan informasi metadata.

Perancah Tampilan yang Disempurnakan

Templat T4 yang digunakan untuk tampilan perancah sekarang menghasilkan panggilan ke metode pembantu templat seperti EditorFor alih-alih pembantu seperti TextBoxFor. Perubahan ini meningkatkan dukungan untuk metadata pada model dalam bentuk atribut anotasi data saat kotak dialog Tambahkan Tampilan menghasilkan tampilan.

Perancah Tambahkan Tampilan juga mencakup deteksi yang ditingkatkan dan penggunaan informasi kunci primer pada model, berdasarkan konvensi. Misalnya, kotak dialog Tambahkan Tampilan menggunakan informasi ini untuk memastikan bahwa nilai kunci primer tidak di-scaffolded sebagai bidang formulir yang dapat diedit.

Templat Edit dan Buat default menyertakan referensi ke skrip jQuery yang diperlukan untuk validasi klien.

Menambahkan Metode Html.Raw

Secara default, mesin tampilan Razor HTML mengodekan semua nilai. Misalnya, cuplikan kode berikut mengodekan HTML di dalam variabel salam sehingga ditampilkan di halaman sebagai <strong>Hello World!</strong>.

@{
  string greeting = "<strong>Hello World!</strong>";
}

<p>@greeting</p>

Metode Html.Raw baru menyediakan cara sederhana untuk menampilkan HTML yang tidak dikodekan ketika konten diketahui aman. Contoh berikut menampilkan string yang sama, tetapi string dirender sebagai markup:

@{
  string greeting = "<strong>Hello World!</strong>";
}

<p>@Html.Raw(greeting)</p>

Mengganti nama Properti "Controller.ViewModel" dan Properti "Tampilan" Menjadi "ViewBag"

Sebelumnya, properti ViewModelPengontrol sesuai dengan properti Tampilan tampilan. Kedua properti ini menyediakan cara untuk mengakses nilai objek ViewDataDictionary menggunakan sintaks aksesor properti dinamis. Kedua properti telah diganti namanya menjadi sama untuk menghindari kebingungan dan menjadi lebih konsisten.

Berganti nama Kelas "ControllerSessionStateAttribute" menjadi "SessionStateAttribute"

Kelas ControllerSessionStateAttribute diperkenalkan dalam rilis RC ASP.NET MVC 3. Properti diganti namanya menjadi lebih succinct.

Mengganti nama Properti RemoteAttribute "Fields" menjadi "AdditionalFields"

Properti Fields kelas RemoteAttribute menyebabkan beberapa kebingungan di antara pengguna. Mengganti nama properti ini menjadi AdditionalFields mengklarifikasi niatnya.

Berganti nama "SkipRequestValidationAttribute" menjadi "AllowHtmlAttribute"

Atribut SkipRequestValidationAttribute diganti namanya menjadi AllowHtmlAttribute untuk lebih mewakili penggunaan yang dimaksudkan.

Mengubah Metode "Html.ValidationMessage" untuk Menampilkan Pesan Kesalahan Berguna Pertama

Metode Html.ValidationMessage diperbaiki untuk menunjukkan pesan kesalahan pertama yang berguna alih-alih hanya menampilkan kesalahan pertama.

Selama pengikatan model, kamus ModelState dapat diisi dari beberapa sumber dengan pesan kesalahan tentang properti, termasuk dari model itu sendiri (jika mengimplementasikan IValidatableObject), dari atribut validasi yang diterapkan ke properti, dan dari pengecualian yang dilemparkan saat properti sedang diakses.

Ketika metode Html.ValidationMessage menampilkan pesan validasi, metode ini melewati entri status model yang menyertakan pengecualian, karena ini umumnya tidak ditujukan untuk pengguna akhir. Sebaliknya, metode mencari pesan validasi pertama yang tidak terkait dengan pengecualian dan menampilkan pesan tersebut. Jika tidak ada pesan seperti itu yang ditemukan, pesan tersebut default ke pesan kesalahan generik yang terkait dengan pengecualian pertama.

@model Memperbaiki Deklarasi untuk tidak Menambahkan Spasi Kosong ke Dokumen

Dalam rilis sebelumnya, @model deklarasi di bagian atas tampilan menambahkan baris kosong ke output HTML yang dirender. Ini telah diperbaiki sehingga deklarasi tidak memperkenalkan spasi kosong.

Menambahkan Properti "FileExtensions" untuk Melihat Mesin untuk Mendukung Nama File Engine-Specific

Mesin tampilan dapat mengembalikan tampilan menggunakan jalur tampilan eksplisit seperti dalam contoh berikut:

return View("~/views/home/index.cshtml");

Mesin tampilan pertama selalu mencoba merender tampilan. Secara default, mesin tampilan Formulir Web adalah mesin tampilan pertama; karena mesin Web Forms tidak dapat merender tampilan Razor, terjadi kesalahan. Mesin tampilan sekarang memiliki properti FileExtensions yang digunakan untuk menentukan ekstensi file mana yang mereka dukung. Properti ini diperiksa ketika ASP.NET menentukan apakah mesin tampilan dapat merender file. Ini adalah perubahan yang melanggar dan detail selengkapnya disertakan di bagian Perubahan Mencolok dari dokumen ini.

Memperbaiki Pembantu "LabelFor" untuk Memancarkan Nilai yang Benar untuk Atribut "Untuk"

Bug diperbaiki di mana metode LabelFor merender atribut untuk yang cocok dengan atribut nama elemen input alih-alih ID-nya. Menurut W3C, untuk atribut harus cocok dengan ID elemen input .

Memperbaiki Metode "RenderAction" untuk Memberikan Prioritas Nilai Eksplisit Selama Pengikatan Model

Dalam versi sebelumnya, nilai eksplisit yang diteruskan ke metode RenderAction diabaikan demi nilai formulir saat ini selama pengikatan model di dalam tindakan anak. Perbaikan memastikan bahwa nilai eksplisit lebih diutamakan selama pengikatan model.

Perubahan Mencolok di ASP.NET MVC 3 RC2

  • Dalam versi ASP.NET MVC sebelumnya, filter tindakan dibuat per permintaan kecuali dalam beberapa kasus. Perilaku ini tidak pernah merupakan perilaku yang dijamin tetapi hanya detail implementasi dan kontrak untuk filter adalah mempertimbangkannya tanpa status. Dalam ASP.NET MVC 3, filter di-cache secara lebih agresif. Oleh karena itu, filter tindakan kustom apa pun yang menyimpan status instans yang tidak benar mungkin rusak.
  • Urutan eksekusi untuk filter pengecualian telah berubah untuk filter pengecualian yang memiliki nilai Pesanan yang sama. Dalam ASP.NET MVC 2 dan yang lebih lama, filter pengecualian pada pengontrol yang memiliki nilai Pesanan yang sama dengan yang ada pada metode tindakan dijalankan sebelum filter pengecualian pada metode tindakan. Ini biasanya akan terjadi ketika filter pengecualian diterapkan tanpa nilai Pesanan yang ditentukan. Dalam ASP.NET MVC 3, urutan ini telah dibalik sehingga handler pengecualian yang paling spesifik dijalankan terlebih dahulu. Seperti pada versi sebelumnya, jika properti Pesanan ditentukan secara eksplisit, filter dijalankan dalam urutan yang ditentukan.
  • Properti baru bernama FileExtensions ditambahkan ke kelas dasar VirtualPathProviderViewEngine . Saat ASP.NET mencari tampilan menurut jalur (bukan berdasarkan nama), hanya tampilan dengan ekstensi file yang terkandung dalam daftar yang ditentukan oleh properti baru ini yang dipertimbangkan. Ini adalah perubahan yang melanggar dalam aplikasi di mana penyedia build kustom terdaftar untuk mengaktifkan ekstensi file kustom untuk tampilan Formulir Web dan di mana penyedia mereferensikan tampilan tersebut dengan menggunakan jalur lengkap daripada nama. Solusinya adalah memodifikasi nilai properti FileExtensions untuk menyertakan ekstensi file kustom.
  • Implementasi pabrik pengontrol kustom yang secara langsung mengimplementasikan antarmuka IControllerFactory harus menyediakan implementasi metode GetControllerSessionBehavior baru yang ditambahkan ke antarmuka dalam rilis ini. Secara umum, disarankan agar Anda tidak mengimplementasikan antarmuka ini secara langsung dan sebaliknya mendapatkan kelas Anda dari DefaultControllerFactory.

Masalah yang Diketahui di ASP.NET MVC 3 RC2

  • Penginstal ASP.NET MVC 3 hanya dapat menginstal versi awal manajer paket NuGet. Setelah Anda menginstal versi awal, NuGet dapat diinstal dan diperbarui menggunakan Visual Studio Extension Manager. Jika Anda sudah menginstal NuGet, buka Visual Studio Extension Gallery untuk memperbarui ke versi terbaru NuGet.
  • Membuat proyek ASP.NET MVC 3 baru dalam folder solusi menyebabkan kesalahan NullReferenceException . Solusinya adalah membuat proyek ASP.NET MVC 3 di akar solusi dan kemudian memindahkannya ke folder solusi.
  • Penginstal mungkin membutuhkan waktu lebih lama daripada versi MVC ASP.NET sebelumnya untuk diselesaikan. Ini karena memperbarui komponen Visual Studio 2010.
  • Sintaks IntelliSense for Razor tidak berfungsi saat ReSharper diinstal. Jika Anda menginstal ReSharper dan ingin memanfaatkan dukungan Razor IntelliSense di ASP.NET MVC 3 RC2, lihat entri Razor Intellisense dan ReSharper di blog Hadi Hariri, yang membahas cara untuk menggunakannya bersama-sama hari ini.
  • Tampilan CSHTML dan VBHTML yang dibuat dengan versi Beta ASP.NET MVC 3 tidak memiliki tindakan build yang ditetapkan dengan benar, dengan hasil bahwa jenis tampilan ini dihilangkan saat proyek diterbitkan. Nilai Tindakan Build untuk file-file ini harus diatur ke Konten". ASP.NET MVC 3 RC2 memperbaiki masalah ini untuk file baru, tetapi tidak memperbaiki pengaturan untuk file yang ada untuk proyek yang dibuat dengan versi Beta. Cuplikan layar kotak dialog properti. Menu tindakan build terbuka dan opsi konten dipilih.
  • Selama penginstalan, kotak dialog penerimaan EULA menampilkan ketentuan lisensi di jendela yang lebih kecil dari yang diinginkan.
  • Saat Anda mengedit tampilan Razor (file.cshtml), item menu Buka Pengontrol di Visual Studio tidak akan tersedia, dan tidak ada cuplikan kode.
  • Jika Anda menginstal ASP.NET MVC 3 untuk Visual Web Developer Express di komputer tempat Visual Studio tidak diinstal, dan kemudian menginstal Visual Studio, Anda harus menginstal ulang ASP.NET MVC 3. Komponen berbagi Visual Studio dan Visual Web Developer Express yang ditingkatkan oleh penginstal ASP.NET MVC 3. Masalah yang sama berlaku jika Anda menginstal ASP.NET MVC 3 untuk Visual Studio di komputer yang tidak memiliki Visual Web Developer Express lalu menginstal Visual Web Developer Express.
  • Menginstal ASP.NET MVC 3 RC 2 tidak memperbarui NuGet jika Anda sudah menginstalnya. Untuk meningkatkan NuGet, buka manajer Ekstensi Visual Studio dan akan muncul sebagai pembaruan yang tersedia. Anda dapat meningkatkan NuGet ke rilis terbaru dari sana.

ASP.NET Kandidat Rilis MVC 3

ASP.NET MVC Release Candidate dirilis pada 9 November 2010.

Fitur Baru di ASP.NET MVC 3 RC

Bagian ini menjelaskan fitur yang telah diperkenalkan dalam ASP.NET rilis MVC 3 RC sejak rilis Beta.

Pengelola Paket NuGet

ASP.NET MVC 3 mencakup NuGet Package Manager (sebelumnya dikenal sebagai NuPack), yang merupakan alat manajemen paket terintegrasi untuk menambahkan pustaka dan alat ke proyek Visual Studio. Alat ini mengotomatiskan langkah-langkah yang dilakukan pengembang hari ini untuk mendapatkan pustaka ke pohon sumber mereka.

Anda dapat bekerja dengan NuGet sebagai alat baris perintah, sebagai jendela konsol terintegrasi di dalam Visual Studio 2010, dari menu konteks Visual Studio, dan sebagai sekumpulan cmdlet PowerShell.

Untuk informasi selengkapnya tentang NuGet, baca Dokumentasi Nuget.

Kotak Dialog "Proyek Baru" yang Disempurnakan

Saat Anda membuat proyek baru, kotak dialog Proyek Baru sekarang memungkinkan Anda menentukan mesin tampilan serta jenis proyek MVC ASP.NET.

Cuplikan layar kotak dialog proyek baru. Menu mesin tampilan terbuka dan pisau cukur dipilih.

Dukungan untuk memodifikasi daftar templat dan melihat mesin yang tercantum dalam kotak dialog disertakan dalam rilis ini.

Templat defaultnya adalah sebagai berikut:

Kosong. Berisi sekumpulan file minimal untuk proyek MVC ASP.NET, termasuk struktur direktori default untuk proyek MVC ASP.NET, file Site.css yang berisi gaya ASP.NET MVC default, dan direktori Skrip yang berisi file JavaScript default.

Aplikasi Internet. Berisi fungsionalitas sampel yang menunjukkan cara menggunakan penyedia keanggotaan dengan ASP.NET MVC.

Daftar templat proyek yang ditampilkan dalam kotak dialog ditentukan dalam registri Windows.

Pengontrol Tanpa Sesi

ControllerSessionStateAttribute baru memberi Anda lebih banyak kontrol atas perilaku keadaan sesi untuk pengontrol dengan menentukan nilai enumerasi System.Web.SessionState.SessionStateBehavior.

Contoh berikut menunjukkan cara menonaktifkan status sesi untuk semua permintaan ke pengontrol.

[ControllerSessionState(SessionStateBehavior.Disabled)]
public class CoolController : Controller {
    public ActionResult Index() {
        object o = Session["Key"]; // Causes an exception.

    }
}

Contoh berikut menunjukkan cara mengatur status sesi baca-saja untuk semua permintaan ke pengontrol.

[ControllerSessionState(SessionStateBehavior.ReadOnly)]
public class CoolController : Controller {
    public ActionResult Index() {
    Session["Key"] = "value"; // Value is not available in
    the next request
    }
}

Atribut Validasi Baru

CompareAttribute

Atribut validasi CompareAttribute baru memungkinkan Anda membandingkan nilai dua properti model yang berbeda. Dalam contoh berikut, properti ComparePassword harus cocok dengan bidang Kata Sandi agar valid.

public class User {
    [Required]

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

RemoteAttribute

Atribut validasi RemoteAttribute baru memanfaatkan validator jarak jauh plug-in Validasi jQuery, yang memungkinkan validasi sisi klien untuk memanggil metode di server yang melakukan logika validasi aktual.

Dalam contoh berikut, properti UserName memiliki RemoteAttribute yang diterapkan. Saat mengedit properti ini dalam tampilan Edit, validasi klien akan memanggil tindakan bernama UserNameAvailable pada kelas UsersController untuk memvalidasi bidang ini.

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

Contoh berikut menunjukkan pengontrol yang sesuai.

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

Secara default, nama properti tempat atribut diterapkan dikirim ke metode tindakan sebagai parameter string kueri.

Kelebihan Beban Baru untuk Metode "LabelFor" dan "LabelForModel"

Kelebihan beban baru telah ditambahkan untuk metode LabelFor dan LabelForModel yang memungkinkan Anda menentukan teks label. Contoh berikut menunjukkan cara menggunakan kelebihan beban ini.

@Html.LabelFor(m => m.PropertyName,
"Label Text");
@Html.LabelForModel("Label Text");

Penembolokan Output Tindakan Anak

OutputCacheAttribute mendukung penembolokan output tindakan anak yang dipanggil dengan menggunakan metode pembantu Html.RenderAction atau Html.Action. Contoh berikut menunjukkan tampilan yang memanggil tindakan lain.

Hi there. The uncached time is:
@DateTime.Now
The cached time is: @Html.Action("GetDate")

Tindakan GetDate diannotasikan dengan OutputCacheAttribute:

[OutputCache(Duration = 100,
VaryByParam = "none")]
public string GetDate() {
    return DateTime.Now.ToString();
}

Ketika kode ini berjalan, hasil panggilan ke Html.Action("GetDate") di-cache selama 100 detik.

Penyempurnaan Kotak Dialog "Tambahkan Tampilan"

Saat Anda menambahkan tampilan yang ditik dengan kuat, kotak dialog Tambahkan Tampilan sekarang memfilter lebih banyak jenis yang tidak berlaku daripada dalam rilis sebelumnya, seperti banyak jenis .NET Framework inti. Selain itu, daftar sekarang diurutkan berdasarkan nama kelas dan bukan dengan nama jenis yang sepenuhnya memenuhi syarat, yang membuatnya lebih mudah untuk menemukan jenis. Misalnya, nama jenis sekarang ditampilkan seperti dalam contoh berikut:

ClassName (namespace)

Dalam rilis sebelumnya, ini akan ditampilkan sebagai berikut:

Namespace.ClassName

Validasi Permintaan Terperinci

Properti KecualikanValidateInputAttribute tidak ada lagi. Sebagai gantinya, agar validasi permintaan dilewati untuk properti model tertentu selama pengikatan model, gunakan SkipRequestValidationAttribute baru.

Misalnya, metode tindakan digunakan untuk mengedit posting blog:

[HttpPost]
public ActionResult Edit(BlogPostViewModel post) {
    // Save the post in the database
}

Contoh berikut menunjukkan model tampilan untuk posting blog.

public class BlogPostViewModel {
    public int Id {get; set;}

    public string Subject {get; set;}

    public string Description {get; set;}
}

Saat pengguna mengirimkan beberapa markup untuk properti Deskripsi, pengikatan model akan gagal karena validasi permintaan. Untuk menonaktifkan validasi permintaan selama pengikatan model untuk deskripsi posting blog, terapkan SkipRequpestValidationAttribute ke properti , seperti yang ditunjukkan dalam contoh ini:.

public class BlogPostViewModel {
    public int Id {get; set;}

    public string Subject {get; set;}

    [SkipRequestValidation]

    public string Description {get; set;}
}

Atau, untuk menonaktifkan validasi permintaan untuk setiap properti model, terapkan ValidateInputAttribute dengan nilai false ke metode tindakan:

[HttpPost]
[ValidateInput(false)]
public ActionResult Edit(BlogPostViewModel post) {
    // Save the post in the database
}

Perubahan Mencolok di ASP.NET MVC 3 RC

  • Urutan eksekusi untuk filter pengecualian telah berubah untuk filter pengecualian yang memiliki nilai Pesanan yang sama. Dalam ASP.NET MVC 2 dan yang lebih lama, filter pengecualian pada pengontrol yang memiliki Urutan yang sama dengan yang ada pada metode tindakan dijalankan sebelum filter pengecualian pada metode tindakan. Ini biasanya akan terjadi ketika filter pengecualian diterapkan tanpa nilai Pesanan tertentu. Dalam ASP.NET MVC 3, urutan ini telah dibalik sehingga handler pengecualian yang paling spesifik dijalankan terlebih dahulu. Seperti pada versi sebelumnya, jika properti Pesanan ditentukan secara eksplisit, filter dijalankan dalam urutan yang ditentukan.
  • Menambahkan properti baru bernama FileExtensions ke kelas dasar VirtualPathProviderViewEngine . Saat mencari tampilan menurut jalur (dan bukan berdasarkan nama), hanya tampilan dengan ekstensi file yang terkandung dalam daftar yang ditentukan oleh properti baru ini yang dipertimbangkan. Ini adalah perubahan yang melanggar bagi mereka yang mendaftarkan penyedia build kustom untuk mengaktifkan ekstensi file kustom untuk tampilan formulir web dan mereferensikan tampilan tersebut dengan menggunakan jalur lengkap daripada nama. Solusinya adalah memodifikasi nilai properti FileExtensions untuk menyertakan ekstensi file kustom.

Masalah yang Diketahui di ASP.NET MVC 3 RC

  • Penginstal mungkin membutuhkan waktu lebih lama daripada versi ASP.NET MVC sebelumnya untuk diselesaikan karena memperbarui komponen Visual Studio 2010.
  • Perancah Tambahkan Tampilan saat memilih perancah tampilan yang ditik secara astrongly menulis-saja. Ini harus selalu diabaikan dengan perancah. Dialog Tambahkan Tampilan juga membuat perancah properti baca-saja saat menghasilkan tampilan "Edit" atau "Buat". Properti baca-saja hanya boleh di-scaffold untuk tampilan Tampilan dan Daftar.
  • Penelusuran kesalahan tidak berfungsi saat ASP.NET MVC 3 diinstal bersama Async CTP. ASP.NET MVC 3 tidak dapat diinstal berdampingan dengan Async CTP. Hapus instalan Async CTP untuk memperbaiki penelusuran kesalahan. Untuk detail selengkapnya, baca posting blog ini tentang menghapus instalan semua potongan ASP.NET MVC 3 RC.
  • Razor Intellisense tidak berfungsi ketika Resharper diinstal. Jika Anda memiliki ReSharper yang diinstal dan ingin memanfaatkan dukungan intellisense Razor di ASP.NET MVC 3 RC, silakan baca posting blog ini dari JetBrains yang membahas cara untuk menggunakannya bersama-sama hari ini.
  • Tampilan CSHTML dan VBHTML yang dibuat dengan Beta ASP.NET MVC 3 tidak memiliki tindakan build dengan benar yang menghilangkannya dari penerbitan. Tindakan Build untuk file-file ini harus diatur ke "Konten". ASP.NET MVC 3 RC memperbaiki masalah ini untuk file baru, tetapi tidak memperbaiki pengaturan untuk file yang ada untuk proyek yang dibuat dengan Beta.
  • Penginstal mungkin membutuhkan waktu lebih lama daripada versi ASP.NET MVC sebelumnya untuk diselesaikan karena memperbarui komponen Visual Studio 2010.
  • Perancah Tambahkan Tampilan saat memilih "Edit" perancah tampilan yang sangat di ketikkan sebagai properti baca-saja. Demikian juga, properti hanya-tulis di-scaffold untuk tampilan "Tampilan".
  • Selama penginstalan, kotak dialog penerimaan EULA menampilkan ketentuan lisensi di jendela yang lebih kecil dari yang dimaksudkan.
  • Menginstal Visual Studio Async CTP menyebabkan konflik dengan rilis Razor yang disertakan sebagai bagian dari penginstalan alat ASP.NET MVC 3. Pastikan Anda tidak mencoba menginstal Visual Studio Async CTP dan rilis Razor pada komputer yang sama.
  • Saat Anda mengedit tampilan Razor (file .cshtml), item menu Buka Pengontrol di Visual Studio tidak akan tersedia, dan tidak ada cuplikan kode.

ASP.NET MVC 3 Beta

ASP.NET MVC 3 Beta dirilis pada 6 Oktober 2010. Catatan berikut khusus untuk rilis Beta, dan tunduk pada pembaruan atau perubahan apa pun yang dirujuk di bagian Kandidat Rilis ASP.NET MVC 3 di atas.

Fitur Baru di ASP.NET MVC 3 Beta

Bagian ini menjelaskan fitur yang telah diperkenalkan dalam rilis MVC 3 Beta ASP.NET.

Pengelola Paket NuGet

ASP.NET MVC 3 mencakup NuGet Package Manager, yang merupakan alat manajemen paket terintegrasi untuk menambahkan pustaka dan alat ke proyek Visual Studio. Sebagian besar, ini mengotomatiskan langkah-langkah yang diambil pengembang hari ini untuk mendapatkan pustaka ke pohon sumber mereka.

Anda dapat bekerja dengan NuGet sebagai alat baris perintah, sebagai jendela konsol terintegrasi di dalam Visual Studio 2010, dari menu konteks Visual Studio, dan sebagai sekumpulan cmdlet PowerShell.

Untuk informasi selengkapnya tentang NuGet, baca Dokumentasi NuGet.

Kotak Dialog Proyek Baru yang Disempurnakan

Saat Anda membuat proyek baru, kotak dialog Proyek Baru sekarang memungkinkan Anda menentukan mesin tampilan serta jenis proyek MVC ASP.NET.

Cuplikan layar kotak dialog proyek baru. Razor dipilih dari menu mesin tampilan.

Dukungan untuk memodifikasi daftar templat dan melihat mesin yang tercantum dalam kotak dialog tidak disertakan dalam rilis ini.

Templat default adalah sebagai berikut:

Kosong. Berisi sekumpulan file minimal untuk proyek MVC ASP.NET, termasuk struktur direktori default untuk proyek MVC ASP.NET, file Site.css kecil yang berisi gaya MVC ASP.NET default, dan direktori Skrip yang berisi file JavaScript default.

Aplikasi Internet. Berisi fungsionalitas sampel yang menunjukkan cara menggunakan penyedia keanggotaan dalam ASP.NET MVC.

Cara Yang Disederhanakan untuk Menentukan Model yang Sangat Ditik dalam Tampilan Razor

Cara menentukan jenis model untuk tampilan Razor yang ditik dengan kuat telah disederhanakan dengan menggunakan arahan baru @model untuk tampilan CSHTML dan @ModelType direktif untuk tampilan VBHTML. Dalam versi ASP.NET MVC yang lebih lama, Anda akan menentukan model yang sangat ditik untuk tampilan Razor dengan cara ini:

@inherits System.Web.Mvc.WebViewPage

Dalam rilis ini, Anda dapat menggunakan sintaks berikut:

@model MyModelNamespace.MyModelType

Dukungan untuk Metode Pembantu Halaman Web ASP.NET Baru

Teknologi ASP.NET Web Pages baru mencakup serangkaian metode pembantu yang berguna untuk menambahkan fungsionalitas yang umum digunakan ke tampilan dan pengontrol. ASP.NET MVC 3 mendukung penggunaan metode pembantu ini dalam pengontrol dan tampilan (jika sesuai). Metode ini terkandung dalam rakitan System.Web.Helpers. Tabel berikut ini mencantumkan beberapa metode pembantu halaman web ASP.NET.

Penolong Deskripsi
Grafik Merender bagan dalam tampilan. Berisi metode seperti Chart.ToWebImage, Chart.Save, dan Chart.Write.
Kripto Menggunakan algoritma hashing untuk membuat kata sandi asin dan hash dengan benar.
WebGrid Merender kumpulan objek (biasanya, data dari database) sebagai kisi. Mendukung penomoran dan pengurutan.
WebImage Merender gambar.
Webmail Mengirim pesan email.

Topik referensi cepat yang mencantumkan pembantu dan sintaks dasar tersedia sebagai bagian dari dokumentasi sintaks ASP.NET Razor di URL berikut:

https://www.asp.net/webmatrix/tutorials/asp-net-web-pages-api-reference

Dukungan Injeksi Dependensi Tambahan

Dibangun berdasarkan rilis MVC 3 Preview 1 ASP.NET, rilis saat ini mencakup dukungan tambahan untuk dua layanan baru dan empat layanan yang ada, dan peningkatan dukungan untuk resolusi dependensi dan Common Service Locator.

Antarmuka IControllerActivator Baru untuk Instansiasi Pengontrol Fine-Grained

Antarmuka IControllerActivator baru memberikan kontrol yang lebih halus tentang bagaimana pengontrol dibuat melalui injeksi dependensi. Contoh berikut menunjukkan antarmuka:

namespace System.Web.Mvc {
    using System.Web.Routing;

    public interface IControllerActivator {
        IController Create(RequestContext requestContext, Type controllerType);
    }
}

Berbeda dengan peran pabrik pengontrol. Pabrik pengontrol adalah implementasi antarmuka IControllerFactory, yang bertanggung jawab untuk menemukan jenis pengontrol dan untuk membuat instans jenis pengontrol tersebut.

Aktivator pengontrol hanya bertanggung jawab untuk membuat instans jenis pengontrol. Mereka tidak melakukan pencarian tipe pengontrol. Setelah menemukan jenis pengontrol yang tepat, pabrik pengontrol harus mendelegasikan ke instans IControllerActivator untuk menangani instans pengontrol yang sebenarnya.

Kelas DefaultControllerFactory memiliki konstruktor baru yang menerima instans IControllerFactory. Ini memungkinkan Anda menerapkan Injeksi Dependensi untuk mengelola aspek pembuatan pengontrol ini tanpa harus mengambil alih perilaku pencarian jenis pengontrol default.

Antarmuka IServiceLocator Diganti dengan IDependencyResolver

Berdasarkan umpan balik komunitas, rilis ASP.NET MVC 3 Beta telah menggantikan penggunaan antarmuka IServiceLocator dengan antarmuka IDependencyResolver yang disiram khusus untuk kebutuhan ASP.NET MVC. Contoh berikut menunjukkan antarmuka baru:

namespace System.Web.Mvc {
    using System.Collections.Generic;

    public interface IDependencyResolver {
        object GetService(Type serviceType);
        IEnumerable<object> GetServices(Type serviceType);
    }
}

Sebagai bagian dari perubahan ini, kelas ServiceLocator juga diganti dengan kelas DependencyResolver. Pendaftaran resolver dependensi mirip dengan versi ASP.NET MVC yang lebih lama:

DependencyResolver.SetResolver(myResolver);

Implementasi antarmuka ini hanya boleh mendelegasikan ke kontainer injeksi dependensi yang mendasar untuk menyediakan layanan terdaftar untuk jenis yang diminta.

Ketika tidak ada layanan terdaftar dari jenis yang diminta, ASP.NET MVC mengharapkan implementasi antarmuka ini untuk mengembalikan null dari GetService dan mengembalikan koleksi kosong dari GetServices.

Kelas DependencyResolver baru memungkinkan Anda mendaftarkan kelas yang mengimplementasikan antarmuka IDependencyResolver baru atau antarmuka Common Service Locator (IServiceLocator). Untuk informasi selengkapnya tentang Common Service Locator, lihat CommonServiceLocator di GitHub.

Antarmuka IViewActivator Baru untuk Instansiasi Halaman Tampilan Fine-Grained

Antarmuka IViewPageActivator baru memberikan kontrol yang lebih halus atas cara halaman tampilan dibuat melalui injeksi dependensi. Ini berlaku untuk instans WebFormView dan instans RazorView. Contoh berikut menunjukkan antarmuka baru:

namespace System.Web.Mvc {
    public interface IViewPageActivator {
        object Create(ControllerContext controllerContext, Type type);
    }
}

Kelas-kelas ini sekarang menerima argumen konstruktor IViewPageActivator, yang memungkinkan Anda menggunakan injeksi dependensi untuk mengontrol bagaimana jenis ViewPage, ViewUserControl, dan WebViewPage dibuat.

Dukungan Resolver Dependensi Baru untuk Layanan yang Ada

Rilis baru mencakup dukungan resolusi dependensi untuk layanan berikut:

  • Penyedia validasi model. Kelas yang mengimplementasikan ModelValidatorProvider dapat didaftarkan di resolver dependensi, dan sistem akan menggunakannya untuk mendukung validasi sisi klien dan server.
  • Penyedia metadata model. Satu kelas yang mengimplementasikan ModelMetadataProvider dapat didaftarkan di resolver dependensi, dan sistem akan menggunakannya untuk menyediakan metadata untuk sistem templat dan validasi.
  • Penyedia nilai. Kelas yang mengimplementasikan ValueProviderFactory dapat didaftarkan di resolver dependensi, dan sistem akan menggunakannya untuk membuat penyedia nilai yang dikonsumsi oleh pengontrol dan selama pengikatan model.
  • Pengikat model. Kelas yang mengimplementasikan IModelBinderProvider dapat didaftarkan di resolver dependensi, dan sistem akan menggunakannya untuk membuat pengikat model yang dikonsumsi oleh sistem pengikatan model.

Dukungan Baru untuk Ajax Berbasis jQuery Yang Tidak Mengganggu

ASP.NET MVC menyertakan metode pembantu Ajax seperti berikut:

  • Ajax.ActionLink
  • Ajax.RouteLink
  • Ajax.BeginForm
  • Ajax.BeginRouteForm

Metode ini menggunakan JavaScript untuk memanggil metode tindakan di server daripada menggunakan postback penuh. Fungsionalitas ini telah diperbarui untuk memanfaatkan jQuery dengan cara yang tidak mengganggu. Daripada memancarkan skrip klien sebaris secara inline, metode pembantu ini memisahkan perilaku dari markup dengan memancarkan atribut HTML5 menggunakan awalan data-ajax . Perilaku kemudian diterapkan ke markup dengan mereferensikan file JavaScript yang sesuai. Pastikan bahwa file JavaScript berikut dirujuk:

  • jquery-1.4.1.js
  • jquery.unobtrusive.ajax.js

Fitur ini diaktifkan secara default dalam file Web.config di templat proyek baru ASP.NET MVC 3, tetapi dinonaktifkan secara default untuk proyek yang ada. Untuk informasi selengkapnya, lihat Menambahkan bendera di seluruh aplikasi untuk validasi klien dan JavaScript yang tidak mengganggu nanti dalam dokumen ini.

Dukungan Baru untuk Validasi jQuery Yang Tidak Mengganggu

Secara default, ASP.NET MVC 3 Beta menggunakan validasi jQuery dengan cara yang tidak mengganggu untuk melakukan validasi sisi klien. Untuk mengaktifkan validasi klien yang tidak mengganggu, lakukan panggilan seperti berikut ini dari dalam tampilan:

Html.EnableClientValidation();

Ini mengharuskan properti ViewContext.UnobtrusiveJavaScriptEnabled diatur ke true, yang dapat Anda lakukan dengan melakukan panggilan berikut:

Html.EnableUnobtrusiveJavaScript();

Pastikan juga file JavaScript berikut dirujuk.

  • jquery-1.4.1.js
  • jquery.validate.js
  • jquery.validate.unobtrusive.js

Fitur ini diaktifkan secara default dalam file Web.config di templat proyek baru ASP.NET MVC 3, tetapi dinonaktifkan secara default untuk proyek yang ada. Untuk informasi selengkapnya, lihat Bendera seluruh aplikasi baru untuk validasi klien dan JavaScript yang tidak mengganggu nanti dalam dokumen ini.

Bendera Application-Wide Baru untuk Validasi Klien dan JavaScript Tidak Mengganggu

Anda dapat mengaktifkan atau menonaktifkan validasi klien dan JavaScript yang tidak mengganggu secara global menggunakan anggota statis kelas HtmlHelper, seperti dalam contoh berikut:

HtmlHelper.ClientValidationEnabled = true;
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;

Templat proyek default memungkinkan JavaScript yang tidak mengganggu secara default. Anda juga dapat mengaktifkan atau menonaktifkan fitur-fitur ini di file root Web.config aplikasi Anda menggunakan pengaturan berikut:

<configuration>
        <appSettings>
            <add key="ClientValidationEnabled" value="true"/>
            <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
        </appSettings>
    </configuration>

Karena Anda dapat mengaktifkan fitur-fitur ini secara default, kelebihan beban baru diperkenalkan ke kelas HtmlHelper yang memungkinkan Anda mengambil alih pengaturan default, seperti yang ditunjukkan dalam contoh berikut:

public void EnableClientValidation();
public void EnableClientValidation(bool enabled);
public void EnableUnobtrusiveJavaScript();
public void EnableUnobtrusiveJavaScript(bool enabled);

Untuk kompatibilitas mundur, kedua fitur ini dinonaktifkan secara default.

Dukungan Baru untuk Kode yang Berjalan Sebelum Tampilan Berjalan

Anda sekarang dapat meletakkan file bernama _viewstart.cshtml (atau _viewstart.vbhtml) di direktori Tampilan dan menambahkan kode ke dalamnya yang akan dibagikan di antara beberapa tampilan di direktori tersebut dan subdirektorinya. Misalnya, Anda dapat memasukkan kode berikut ke halaman _viewstart.cshtml di folder ~/Views:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

Ini mengatur halaman tata letak untuk setiap tampilan dalam folder Tampilan dan semua subfoldernya secara rekursif. Saat tampilan sedang dirender, kode dalam file _viewstart.cshtml berjalan sebelum kode tampilan berjalan. Kode _viewstart.cshtml berlaku untuk setiap tampilan di folder tersebut.

Secara default, kode dalam file _viewstart.cshtml juga berlaku untuk tampilan di subfolder apa pun. Namun, subfolder individual dapat memiliki versi file _viewstart.cshtml sendiri; dalam hal ini, versi lokal lebih diutamakan. Misalnya, untuk menjalankan kode yang umum untuk semua tampilan untuk HomeController, letakkan file _viewstart.cshtml di folder ~/Views/Home.

Dukungan Baru untuk Sintaks Razor VBHTML

Pratinjau MVC ASP.NET sebelumnya menyertakan dukungan untuk tampilan menggunakan sintaks Razor berdasarkan C#. Tampilan ini menggunakan ekstensi file .cshtml. Sebagai bagian dari pekerjaan yang sedang berlangsung untuk mendukung Razor, ASP.NET MVC 3 Beta memperkenalkan dukungan untuk sintaks Razor di Visual Basic, yang menggunakan ekstensi file .vbhtml.

Untuk pengantar menggunakan sintaks Visual Basic di halaman VBHTML, lihat tutorial di URL berikut:

https://www.asp.net/webmatrix/tutorials/asp-net-web-pages-visual-basic

Kontrol Yang Lebih Terperinci atas ValidateInputAttribute

ASP.NET MVC selalu menyertakan kelas ValidateInputAttribute, yang memanggil inti ASP.NET meminta infrastruktur validasi untuk memastikan bahwa permintaan masuk tidak berisi input yang berpotensi berbahaya. Secara default, validasi input diaktifkan. Dimungkinkan untuk menonaktifkan validasi permintaan dengan menggunakan atribut ValidateInputAttribute, seperti dalam contoh berikut:

[ValidateInput(false)]
public ActionResult SomeAction() {
    return View();
}

Namun, banyak aplikasi web memiliki bidang formulir individual yang perlu mengizinkan HTML, sementara bidang yang tersisa tidak boleh. Kelas ValidateInputAttribute sekarang memungkinkan Anda menentukan daftar bidang yang tidak boleh disertakan dalam validasi permintaan.

Misalnya, jika Anda mengembangkan mesin blog, Anda mungkin ingin mengizinkan markup di bidang Isi dan Ringkasan. Bidang-bidang ini mungkin diwakili oleh dua elemen input, masing-masing dengan atribut nama yang sesuai dengan nama properti ("Isi" dan "Ringkasan"). Untuk menonaktifkan validasi permintaan hanya untuk bidang ini, tentukan nama (dipisahkan koma) di properti Kecualikan kelas ValidateInput, seperti dalam contoh berikut:

[ValidateInput(true, Exclude="Body, Summary")]
public ActionResult About() {
    return View();
}

Pembantu Mengonversi Garis Bawah ke Tanda Hubung untuk Nama Atribut HTML Yang Ditentukan Menggunakan Objek Anonim

Metode pembantu memungkinkan Anda menentukan pasangan nama/nilai atribut menggunakan objek anonim, seperti dalam contoh berikut:

Html.TextBox("Name", "Value", new {title = "Title"})

Pendekatan ini tidak memungkinkan Anda menggunakan tanda hubung dalam nama atribut, karena tanda hubung tidak dapat digunakan untuk nama properti di ASP.NET. Namun, tanda hubung penting untuk atribut HTML5 kustom; misalnya, HTML5 menggunakan awalan "data-".

Pada saat yang sama, garis bawah tidak dapat digunakan untuk nama atribut dalam HTML, tetapi valid dalam nama properti. Oleh karena itu, jika Anda menentukan atribut menggunakan objek anonim, dan jika nama atribut menyertakan garis bawah, metode pembantu akan mengonversi garis bawah menjadi tanda hubung. Misalnya, sintaks pembantu berikut menggunakan garis bawah:

Html.TextBox("Name", "Value", new {data_required = "true"})

Contoh sebelumnya merender markup berikut saat pembantu berjalan:

<input data-required="true" id="Name" name="Name"
       type="textbox" value="Value" />

Perbaikan Bug

Templat objek default untuk pembantu templat EditorFor dan DisplayFor sekarang mendukung urutan yang ditentukan dalam properti DisplayAttribute.Order. (Di versi sebelumnya, pengaturan Pesanan tidak digunakan.)

Validasi klien sekarang mendukung validasi properti yang ditimpa yang menerapkan atribut validasi.

JsonValueProviderFactory sekarang terdaftar secara default.

Memecahkan Perubahan

Urutan eksekusi untuk filter pengecualian telah berubah untuk filter pengecualian yang memiliki nilai Pesanan yang sama. Dalam ASP.NET MVC 2 dan yang lebih lama, filter pengecualian pada pengontrol dengan Urutan yang sama dengan yang ada pada metode tindakan dijalankan sebelum filter pengecualian pada metode tindakan. Ini biasanya akan terjadi ketika filter pengecualian diterapkan tanpa nilai Pesanan tertentu. Dalam ASP.NET MVC 3, urutan ini telah dibalik sehingga handler pengecualian yang paling spesifik dijalankan terlebih dahulu. Seperti pada versi sebelumnya, jika properti Pesanan ditentukan secara eksplisit, filter dijalankan dalam urutan yang ditentukan.

Masalah Umum

Selama penginstalan, kotak dialog penerimaan EULA menampilkan ketentuan lisensi di jendela yang lebih kecil dari yang dimaksudkan.

Tampilan razor tidak memiliki dukungan IntelliSense atau penyorotan sintaksis. Diantisipasi bahwa dukungan untuk sintaks Razor di Visual Studio akan disertakan sebagai bagian dari rilis selanjutnya.

Saat Anda mengedit tampilan Razor (file CSHTML), item menu Buka Pengontrol di Visual Studio tidak akan tersedia, dan tidak ada cuplikan kode.

Saat menggunakan @model sintaks untuk menentukan tampilan CSHTML yang ditik dengan kuat, pintasan khusus bahasa untuk jenis tidak dikenali. Misalnya, @model int tidak akan berfungsi, tetapi @model Int32 akan berfungsi. Solusi untuk bug ini adalah menggunakan nama jenis aktual saat Anda menentukan jenis model.

Saat menggunakan @model sintaks untuk menentukan tampilan CSHTML yang ditik dengan kuat (atau @ModelType untuk menentukan tampilan VBHTML yang ditik dengan kuat), jenis yang dapat diubah ke null dan deklarasi array tidak didukung. Misalnya, @model int? tidak didukung. Sebagai gantinya, gunakan @model Nullable<Int32>. String sintaks @model [] juga tidak didukung; sebagai gantinya, gunakan @model IList<string>.

Saat Anda meningkatkan proyek MVC 2 ASP.NET ke ASP.NET MVC 3, pastikan untuk menambahkan yang berikut ini ke bagian appSettings dari file Web.config:

<appSettings>
  <add key="enableSimpleMembership" value="false" />
</appSettings>

Ada masalah yang diketahui yang menyebabkan Autentikasi Formulir selalu mengalihkan pengguna yang tidak diautentikasi ke ~/Akun/Login, mengabaikan pengaturan autentikasi formulir yang digunakan dalam Web.config. Solusinya adalah menambahkan pengaturan aplikasi berikut.

<add key="autoFormsAuthentication" value="false" />

Disclaimer

© 2011 Microsoft Corporation. Hak cipta dilindungi undang-undang. Dokumen ini disediakan "apa adanya." Informasi dan tampilan yang dinyatakan dalam dokumen ini, termasuk URL dan referensi situs Web Internet lainnya, dapat berubah tanpa pemberitahuan. Anda menanggung risiko menggunakannya.

Dokumen ini tidak memberi Anda hak hukum apa pun atas kekayaan intelektual apa pun dalam produk Microsoft apa pun. Anda dapat menyalin dan menggunakan dokumen ini untuk tujuan referensi internal Anda.