Apa perbedaan antara ViewResult()
dan ActionResult()
dalam ASP.NET MVC?
public ViewResult Index()
{
return View();
}
public ActionResult Index()
{
return View();
}
asp.net
asp.net-mvc
Domnic
sumber
sumber
Jawaban:
ActionResult adalah kelas abstrak yang dapat memiliki beberapa subtipe.
Subtipe ActionResult
ViewResult - Memberikan tampilan yang ditentukan ke aliran respons
PartialViewResult - Memberikan tampilan parsial tertentu ke aliran respons
EmptyResult - Respons kosong dikembalikan
RedirectResult - Melakukan pengalihan HTTP ke URL yang ditentukan
RedirectToRouteResult - Melakukan pengalihan HTTP ke URL yang ditentukan oleh mesin perutean, berdasarkan data rute yang diberikan
JsonResult - Menerialisasikan objek ViewData yang diberikan ke format JSON
JavaScriptResult - Mengembalikan sepotong kode JavaScript yang dapat dieksekusi pada klien
ContentResult - Menulis konten ke aliran respons tanpa memerlukan tampilan
FileContentResult - Mengembalikan file ke klien
FileStreamResult - Mengembalikan file ke klien, yang disediakan oleh Stream
FilePathResult - Mengembalikan file ke klien
Sumber daya
sumber
ActionResult adalah kelas abstrak.
ViewResult berasal dari ActionResult . Kelas turunan lainnya termasuk JsonResult dan PartialViewResult .
Anda mendeklarasikannya dengan cara ini sehingga Anda dapat memanfaatkan polimorfisme dan mengembalikan tipe yang berbeda dengan metode yang sama.
misalnya:
sumber
Itu untuk alasan yang sama Anda tidak menulis setiap metode setiap kelas untuk mengembalikan "objek". Anda harus sespesifik mungkin. Ini sangat berharga jika Anda berencana untuk menulis tes unit. Tidak ada lagi pengujian tipe pengembalian dan / atau casting hasilnya.
sumber
ViewResult adalah subkelas dari ActionResult. Metode Lihat mengembalikan ViewResult. Jadi sebenarnya dua cuplikan kode ini melakukan hal yang persis sama. Satu-satunya perbedaan adalah bahwa dengan yang ActionResult, controller Anda tidak menjanjikan untuk mengembalikan tampilan - Anda bisa mengubah tubuh metode untuk mengembalikan RedirectResult atau sesuatu yang lain tanpa mengubah definisi metode.
sumber
Sementara jawaban lain telah mencatat perbedaan dengan benar, perhatikan bahwa jika Anda benar-benar mengembalikan ViewResult hanya lebih baik untuk mengembalikan tipe yang lebih spesifik daripada tipe ActionResult dasar. Pengecualian yang jelas untuk prinsip ini adalah ketika metode Anda mengembalikan beberapa jenis yang berasal dari ActionResult.
Untuk diskusi lengkap tentang alasan di balik prinsip ini, silakan lihat diskusi terkait di sini: Haruskah Metode Pengontrol ASP.NET MVC Mengembalikan ActionResult?
sumber
Di Controller, seseorang dapat menggunakan sintaks di bawah ini
Dalam contoh di atas, hanya tipe pengembalian bervariasi. satu kembali
ViewResult
sedangkan yang lain kembaliActionResult
.ActionResult adalah kelas abstrak. Itu dapat menerima:
ViewResult, PartialViewResult, EmptyResult, RedirectResult, RedirectToRouteResult, JsonResult, JavaScriptResult, ContentResult, FileContentResult, FileStreamResult, FilePathResult dll.
Itu
ViewResult
adalah subkelas dariActionResult
.sumber
Dalam Kontroler saya telah menentukan kode di bawah ini dengan ActionResult yang merupakan kelas dasar yang dapat memiliki 11 subtipe dalam MVC seperti: ViewResult, PartialViewResult, EmptyResult, RedirectResult, JsonResult, JavaScriptResult, FileRontultes Fileult, Fileult, FileStreamRathult
Demikian juga kita dapat mengembalikan semua 11 subtipe ini dengan menggunakan ActionResult () tanpa menentukan setiap metode subtipe secara eksplisit. ActionResult adalah hal terbaik jika Anda mengembalikan berbagai jenis tampilan.
sumber
Untuk menghemat waktu Anda di sini adalah jawaban dari tautan dalam jawaban sebelumnya di https://forums.asp.net/t/1448398.aspx
ActionResult adalah kelas abstrak, dan kelas dasar untuk kelas ViewResult.
Dalam kerangka kerja MVC, ia menggunakan kelas ActionResult untuk referensi objek metode tindakan Anda kembali. Dan memanggil metode ExecuteResult di atasnya.
Dan ViewResult adalah implementasi untuk kelas abstrak ini. Ini akan mencoba untuk menemukan halaman tampilan (biasanya halaman aspx) di beberapa jalur yang telah ditentukan (/ views / controllername /, / views / shared /, dll) dengan nama tampilan yang diberikan.
Biasanya merupakan praktik yang baik untuk meminta metode Anda mengembalikan kelas yang lebih spesifik. Jadi jika Anda yakin bahwa metode tindakan Anda akan mengembalikan beberapa halaman tampilan, Anda dapat menggunakan ViewResult. Tetapi jika metode tindakan Anda mungkin memiliki perilaku yang berbeda, seperti memberikan tampilan atau melakukan pengalihan. Anda bisa menggunakan ActionResult kelas dasar yang lebih umum sebagai tipe pengembalian.
sumber