Apa manfaat menyetel alias untuk metode tindakan menggunakan atribut "ActionName"? Saya benar-benar tidak melihat banyak manfaat darinya, dalam memberikan pengguna opsi untuk memanggil metode tindakan dengan nama lain. Setelah menentukan alias, pengguna dapat memanggil metode tindakan hanya menggunakan alias. Tetapi jika itu diperlukan, mengapa pengguna tidak mengubah nama metode tindakan daripada menentukan alias untuk itu?
Saya akan sangat menghargai jika ada yang bisa memberi saya contoh penggunaan "ActionName" dalam skenario yang dapat memberikan manfaat besar atau cara terbaik untuk digunakan.
asp.net-mvc
asp.net-mvc-3
Hasan Fahim
sumber
sumber
Jawaban:
Ini memungkinkan Anda untuk memulai tindakan dengan angka atau menyertakan karakter apa pun yang tidak diizinkan .net dalam pengenal.- Alasan paling umum adalah memungkinkan Anda memiliki dua Tindakan dengan tanda tangan yang sama (lihat tindakan GET / POST Hapus dari pengontrol perancah apa pun)
Misalnya: Anda dapat mengizinkan tanda hubung dalam nama tindakan url
http://example.com/products/create-product
vs.http://example.com/products/createproduct
atauhttp://example.com/products/create_product
.public class ProductsController { [ActionName("create-product")] public ActionResult CreateProduct() { return View(); } }
sumber
Controller
, seperti View atau File.Action
View()
maka Anda akan mengalami masalah karena semua referensi keView()
pengontrol Anda saat ini akan menyelesaikannyaAction
daripada metode dasar yang mendasarinya. Jadi untuk menyiasatinya, Anda akan menggunakanActionName
atribut untuk memungkinkanView
tindakan tetapi secara internal Anda akan menyebutnyaPublicView
atau yang serupa.return View("CreateProduct")
atau .NET akan mengomel tentang tidak menemukan tampilan seperticreate-product.aspx
ataucreate-product.cshtml
- Setidaknya kode saya berfungsi seperti ini.Ini juga berguna jika Anda memiliki dua Tindakan dengan tanda tangan yang sama yang seharusnya memiliki url yang sama.
Contoh sederhana:
public ActionResult SomeAction() { ... } [ActionName("SomeAction")] [HttpPost] public ActionResult SomeActionPost() { ... }
sumber
Saya menggunakannya saat pengguna mengunduh laporan sehingga mereka dapat membuka file csv mereka langsung ke Excel dengan mudah.
[ActionName("GetCSV.csv")] public ActionResult GetCSV(){ string csv = CreateCSV(); return new ContentResult() { Content = csv, ContentEncoding = System.Text.Encoding.UTF8, ContentType = "text/csv" }; }
sumber
Coba kode ini:
public class ProductsController { [ActionName("create-product")] public ActionResult CreateProduct() { return View("CreateProduct"); } }
sumber
Kelas ini mewakili atribut yang digunakan untuk nama suatu tindakan. Ini juga memungkinkan pengembang untuk menggunakan nama tindakan yang berbeda dari nama metode.
sumber
Ini juga berguna saat Anda perlu mengimplementasikan metode overloading.
public ActionResult ActorView() { return View(actorsList); } [ActionName("ActorViewOverload")] public ActionResult ActorView(int id) { return RedirectToAction("ActorView","Home"); } `
Di sini satu ActorView tidak menerima parameter dan yang lainnya menerima int. Metode pertama digunakan untuk melihat daftar aktor dan metode lainnya digunakan untuk menampilkan daftar aktor yang sama setelah menghapus item dengan ID sebagai 'id'. Anda dapat menggunakan nama tindakan sebagai 'ActorViewOverload' di mana pun Anda memerlukan metode overloading.
sumber