Bagikan melalui


Meningkatkan Metode Detail dan Hapus (C#)

oleh Rick Anderson

Catatan

Versi terbaru dari tutorial ini tersedia di sini yang menggunakan ASP.NET MVC 5 dan Visual Studio 2013. Lebih aman, jauh lebih mudah untuk diikuti dan menunjukkan lebih banyak fitur.

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 C# tersedia untuk menyertai topik ini. Unduh versi C#. Jika Anda lebih suka Visual Basic, beralihlah ke versi Visual Basic 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 ActionResult Details(int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

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 ActionResult Delete(int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

//
// POST: /Movies/Delete/5

[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    db.Movies.Remove(movie);
    db.SaveChanges();
    return RedirectToAction("Index");
}

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:

// GET: /Movies/Delete/5
public ActionResult Delete(int id = 0)

//
// POST: /Movies/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id = 0)

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 ActionResult Delete(FormCollection fcNotUsed, int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    db.Movies.Remove(movie);
    db.SaveChanges();
    return RedirectToAction("Index");
}

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