Bagikan melalui


Meningkatkan Metode Detail dan Hapus (VB)

oleh Rick Anderson

Tutorial ini akan mengajari Anda dasar-dasar membangun aplikasi Web MVC ASP.NET menggunakan Microsoft Visual Web Developer 2010 Express Service Pack 1, yang merupakan versi gratis dari Microsoft Visual Studio. Sebelum memulai, pastikan Anda telah menginstal prasyarat yang tercantum di bawah ini. Anda dapat menginstal semuanya dengan mengklik tautan berikut: Penginstal Platform Web. Atau, Anda dapat menginstal prasyarat secara individual menggunakan tautan berikut:

Jika Anda menggunakan Visual Studio 2010 alih-alih Visual Web Developer 2010, instal prasyarat dengan mengklik tautan berikut: Prasyarat Visual Studio 2010.

Proyek Visual Web Developer dengan kode sumber VB.NET tersedia untuk menyertai topik ini. Unduh versi VB.NET. Jika Anda lebih suka C#, beralihlah ke versi C# dari tutorial ini.

Di bagian tutorial ini, Anda akan melakukan beberapa peningkatan pada metode dan Delete yang dihasilkan Details secara otomatis. Perubahan ini tidak diperlukan, tetapi hanya dengan beberapa bit kecil kode, Anda dapat dengan mudah meningkatkan aplikasi.

Meningkatkan Detail dan Menghapus Metode

Ketika Anda membuat perancah Movie pengontrol, ASP.NET MVC menghasilkan kode yang bekerja dengan baik, tetapi itu dapat dibuat lebih kuat hanya dengan beberapa perubahan kecil.

Movie Buka pengontrol dan ubah Details metode dengan mengembalikan HttpNotFound saat film tidak ditemukan. Anda juga harus memodifikasi Details metode untuk menetapkan nilai default untuk ID yang diteruskan ke dalamnya. (Anda membuat perubahan serupa pada Edit metode di bagian 6 tutorial ini.) Namun, Anda harus mengubah jenis Details pengembalian metode dari ViewResult ke ActionResult, karena HttpNotFound metode tidak mengembalikan ViewResult objek. Contoh berikut menunjukkan metode yang dimodifikasi Details .

Public Function Details(Optional ByVal id As Integer = 0) As ActionResult
    Dim movie As Movie = db.Movies.Find(id)
    If movie Is Nothing Then
        Return HttpNotFound()
    End If
    Return View(movie)
End Function

Code First memudahkan pencarian data menggunakan Find metode . Fitur keamanan penting yang kami bangun ke dalam metode ini adalah bahwa kode memverifikasi bahwa Find metode telah menemukan film sebelum kode mencoba melakukan apa pun dengannya. Misalnya, peretas dapat memperkenalkan kesalahan ke situs dengan mengubah URL yang dibuat oleh tautan dari http://localhost:xxxx/Movies/Details/1 ke sesuatu seperti http://localhost:xxxx/Movies/Details/12345 (atau beberapa nilai lain yang tidak mewakili film aktual). Jika Anda tidak memeriksa film null, ini dapat mengakibatkan kesalahan database.

Demikian pula, ubah Delete metode dan DeleteConfirmed untuk menentukan nilai default untuk parameter ID dan untuk mengembalikan HttpNotFound saat film tidak ditemukan. Metode yang diperbarui Delete dalam Movie pengontrol ditunjukkan di bawah ini.

' GET: /Movies/Delete/5

 Public Function Delete(Optional ByVal id As Integer = 0) As ActionResult
     Dim movie As Movie = db.Movies.Find(id)
     If movie Is Nothing Then
         Return HttpNotFound()
     End If
     Return View(movie)
 End Function

 '
 ' POST: /Movies/Delete/5

 <HttpPost(), ActionName("Delete")>
 Public Function DeleteConfirmed(Optional ByVal id As Integer = 0) As ActionResult
     Dim movie As Movie = db.Movies.Find(id)
     If movie Is Nothing Then
         Return HttpNotFound()
     End If
     db.Movies.Remove(movie)
     db.SaveChanges()
     Return RedirectToAction("Index")
 End Function

Perhatikan bahwa Delete metode tidak menghapus data. Melakukan operasi penghapusan sebagai respons terhadap permintaan GET (atau untuk hal itu, melakukan operasi edit, membuat operasi, atau operasi lain yang mengubah data) membuka lubang keamanan.

Metode HttpPost yang menghapus data diberi nama DeleteConfirmed untuk memberi metode HTTP POST tanda tangan atau nama yang unik. Dua tanda tangan metode ditunjukkan di bawah ini:

Public Function Delete(Optional ByVal id As Integer = 0) As ActionResult
 
 <HttpPost(), ActionName("Delete")>
 Public Function DeleteConfirmed(Optional ByVal id As Integer = 0) As ActionResult

Runtime bahasa umum (CLR) memerlukan metode kelebihan beban untuk memiliki tanda tangan unik (nama yang sama, daftar parameter yang berbeda). Namun, di sini Anda memerlukan dua metode Hapus -- satu untuk GET dan satu untuk POST -- yang keduanya memerlukan tanda tangan yang sama. (Keduanya perlu menerima bilangan bulat tunggal sebagai parameter.)

Untuk mengatasinya, Anda dapat melakukan beberapa hal. Salah satunya adalah memberikan metode nama yang berbeda. Itulah yang kita lakukan dalam contoh sebelumnya. Namun, ini memperkenalkan masalah kecil: ASP.NET memetakan segmen URL ke metode tindakan berdasarkan nama, dan jika Anda mengganti nama metode, perutean biasanya tidak akan dapat menemukan metode tersebut. Solusinya adalah apa yang Anda lihat dalam contoh, yaitu menambahkan ActionName("Delete") atribut ke DeleteConfirmed metode . Ini secara efektif melakukan pemetaan untuk sistem perutean sehingga URL yang menyertakan /Delete/untuk permintaan POST akan menemukan DeleteConfirmed metode .

Cara lain untuk menghindari masalah dengan metode yang memiliki nama dan tanda tangan yang identik adalah dengan mengubah tanda tangan metode POST secara buatan untuk menyertakan parameter yang tidak digunakan. Misalnya, beberapa pengembang menambahkan jenis FormCollection parameter yang diteruskan ke metode POST, dan kemudian tidak menggunakan parameter :

Public Function Delete(ByVal fcNotUsed As FormCollection, Optional ByVal id As Integer = 0) As ActionResult
Dim movie As Movie = db.Movies.Find(id)
If movie Is Nothing Then
    Return HttpNotFound()
End If
db.Movies.Remove(movie)
db.SaveChanges()
Return RedirectToAction("Index")
End Function

Membungkus Ke atas

Anda sekarang memiliki aplikasi MVC ASP.NET lengkap yang menyimpan data dalam database Ringkas SQL Server. Anda dapat membuat, membaca, memperbarui, menghapus, dan mencari film.

Cuplikan layar yang memperlihatkan halaman Indeks Pencarian di Aplikasi Film M V C. Halaman ini memperlihatkan daftar empat film.

Tutorial dasar ini membuat Anda mulai membuat pengontrol, mengaitkannya dengan tampilan, dan meneruskan data yang dikodekan secara permanen. Kemudian Anda membuat dan merancang model data. Kode Kerangka Kerja Entitas Pertama-tama membuat database dari model data dengan cepat, dan sistem perancah MVC ASP.NET secara otomatis menghasilkan metode tindakan dan tampilan untuk operasi CRUD dasar. Anda kemudian menambahkan formulir pencarian yang memungkinkan pengguna mencari database. Anda mengubah database untuk menyertakan kolom data baru, lalu memperbarui dua halaman untuk membuat dan menampilkan data baru ini. Anda menambahkan validasi dengan menandai model data dengan atribut dari DataAnnotations namespace. Validasi yang dihasilkan berjalan pada klien dan di server.

Jika Anda ingin menyebarkan aplikasi, sangat membantu untuk terlebih dahulu menguji aplikasi di server IIS 7 lokal Anda. Anda dapat menggunakan tautan Penginstal Platform Web ini untuk mengaktifkan pengaturan IIS untuk aplikasi ASP.NET. Lihat tautan penyebaran berikut:

Saya sekarang mendorong Anda untuk beralih ke tingkat menengah kami Membuat Model Data Kerangka Kerja Entitas untuk ASP.NET tutorial Aplikasi MVC dan MVC Music Store , untuk menjelajahi artikel ASP.NET di MSDN, dan untuk memeriksa banyak video dan sumber daya di https://asp.net/mvc untuk mempelajari lebih lanjut tentang ASP.NET MVC! Forum MVC ASP.NET adalah tempat yang bagus untuk mengajukan pertanyaan.

Nikmati!

— Scott Hanselman (http://hanselman.com dan @shanselman di Twitter) dan Rick Anderson blogs.msdn.com/rickAndy