[A]sp.Net MVC tidak memungkinkan bagi kita untuk mengirim lebih dari satu model dari controller ke view. Akan tetapi, bukan berarti kita tidak bisa menampilkan multiple model di dalam razor. Ada beberapa workaround yang bisa dilakukan untuk mencapainya.
Misalkan kita memiliki dua buah kelas model, Buku dan Artikel
1 2 3 4 5 6 7 8 9 10 11 |
using System; namespace MvcMultipleModel.Models { public class Buku { public int Id { get; set; } public String Judul { get; set; } public String Sinopsis { get; set; } } } |
1 2 3 4 5 6 7 8 9 10 11 |
using System; namespace MvcMultipleModel.Models { public class Artikel { public int Id { get; set; } public String Judul { get; set; } public String Konten { get; set; } } } |
Kita menginginkan supaya kedua model di atas bisa ditampilkan secara bersamaan pada sebuah halaman view seperti di bawah ini.
Untuk mencapai tujuan di atas sebenarnya ada banyak cara, setidaknya ada 4 cara yang saya tahu. Namun yang saya tulis hanyalah salah satu cara yang saya lihat paling banyak digunakan.
Untuk menampilkan dua buah model yang berbeda pada sebuah halaman view kita bisa menggunakan sebuah view model. Sesuai namanya, view model adalah model yang ditujukan untuk digunakan pada view saja, tidak digunakan sebagai entity yang mewakili tabel database.
Berikut ini kodenya
1 2 3 4 5 6 7 8 9 10 |
using System.Collections.Generic; namespace MvcMultipleModel.Models { public class BukuArtikelViewModel { public List<Buku> Bukus { get; set; } public List<Artikel> Artikels { get; set; } } } |
Model ini digunakan untuk membungkus model Buku dan juga Artikel sehingga keduanya bisa diakses secara bersamaan di view.
Kode di bawah ini akan menjelaskan segalanya.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
using MvcMultipleModel.Models; using System.Collections.Generic; using System.Web.Mvc; namespace MvcMultipleModel.Controllers { public class HomeController : Controller { public ActionResult Index() { BukuArtikelViewModel model = new BukuArtikelViewModel(); model.Bukus = GetBuku(); model.Artikels = GetArtikel(); return View(model); } private List<Buku> GetBuku() { List<Buku> Bukus = new List<Buku>(); Bukus.Add(new Buku() { Id = 1, Judul = "Penelusuran Benang Merah", Sinopsis = "Kemunculuan perdana Sherlock Holmes dan dr Watson" }); Bukus.Add(new Buku() { Id = 2, Judul = "Empat Pemburu Harta", Sinopsis = "Sherlock Holmes dan dr Watson mengejar para pemburu harta" }); Bukus.Add(new Buku() { Id = 3, Judul = "Petualangan Sherlock Holmes", Sinopsis = "Kumpulan kisah-kisah petualangan Sherlock Holmes" }); return Bukus; } private List<Artikel> GetArtikel() { List<Artikel> Artikels = new List<Artikel>(); Artikels.Add(new Artikel() { Id = 1, Judul = "Penelitian abu rokok dari berbagai merek", Konten = "Isi yang panjang" }); Artikels.Add(new Artikel() { Id = 2, Judul = "Menarik Kesimpulan", Konten = "Isi yang panjang" }); Artikels.Add(new Artikel() { Id = 3, Judul = "Ilmu deduksi", Konten = "Isi yang panjang" }); return Artikels; } } } |
Di view kita bisa mengakses Artikel dan Buku seperti ditunjukkan kode di bawah
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
@{ ViewBag.Title = "Buku & Artikel"; } @model MvcMultipleModel.Models.BukuArtikelViewModel <h2>Buku & Artikel</h2> <h3>Buku</h3> <table> <tr> <th>Id</th> <th>Judul</th> <th>Sinopsis</th> </tr> @foreach(var buku in Model.Bukus) { <tr> <td>@buku.Id</td> <td>@buku.Judul</td> <td>@buku.Sinopsis</td> </tr> } </table> <hr/> <h3>Artikel</h3> <table> <tr> <th>Id</th> <th>Judul</th> <th>Konten</th> </tr> @foreach (var artikel in Model.Artikels) { <tr> <td>@artikel.Id</td> <td>@artikel.Judul</td> <td>@artikel.Konten</td> </tr> } </table> |
Semoga membantu 🙂
Akhirnya saya nemuin tulisan2 ASP.NET MVC berbahasa Indonesia dan struktur bahasanya sangat mudah saya pahami.
Oh iya, saat ini saya belum pernah mencoba lebih dari 1 class di model. Nanti akan saya coba deh, kayaknya bisa bikin lebih irit model dan controller.