Untuk aplikasi web kami, saya harus menyimpan urutan item yang diambil dan ditampilkan tergantung pada tampilan - atau tepatnya - pengontrol dan tindakan yang menghasilkan tampilan (dan id pengguna tentu saja, tapi bukan itu intinya di sini).
Alih-alih hanya memberikan pengidentifikasi sendiri dalam setiap tindakan pengontrol (untuk menggunakannya untuk beberapa pengurutan keluaran DB), saya berpikir bahwa akan lebih aman dan lebih mudah untuk membuat pengidentifikasi ini secara otomatis dari pengontrol dan metode tindakan yang didapatnya. dipanggil dari.
Bagaimana saya bisa mendapatkan nama controller dan action dari dalam metode action di controller? Atau apakah saya perlu refleksi untuk itu? Saya kira itu sangat mudah, terima kasih sebelumnya!
sumber
Route
atribut pada metode tindakan yang saya kumpulkan? Juga, apakah mungkin untuk mengganti nama pengontrol?Jawaban:
sumber
Berikut adalah beberapa metode ekstensi untuk mendapatkan informasi tersebut (termasuk ID):
Pemakaian:
sumber
Mungkin bermanfaat. Saya membutuhkan tindakan dalam konstruktor controller, dan muncul pada titik siklus hidup MVC,
this
belum diinisialisasi, danControllerContext = null
. Alih-alih mempelajari siklus hidup MVC dan menemukan nama fungsi yang tepat untuk menggantikan, saya hanya menemukan tindakan diRequestContext.RouteData
.Tetapi untuk melakukannya, seperti halnya
HttpContext
penggunaan terkait dalam konstruktor, Anda harus menentukan namespace lengkap, karenathis.HttpContext
juga belum diinisialisasi. Untungnya, itu tampakSystem.Web.HttpContext.Current
statis.CATATAN: kemungkinan bukan cara yang paling didukung untuk mengakses semua properti di HttpContext, tetapi untuk RequestContext dan Session tampaknya berfungsi dengan baik dalam aplikasi saya.
sumber
sumber
sumber
Inilah yang saya miliki sejauh ini:
sumber
Inilah jawaban paling sederhana dan paling praktis untuk mendapatkan nama:
Atau
Kode tes di atas dengan asp.net mvc 5.
sumber
Tambahkan ini ke pengontrol dasar Anda di dalam metode GetDefaults ()
Terapkan pengendali Anda ke Basecontroller
Tambahkan sebagian tampilan _Breadcrumb.cshtml dan tambahkan di semua halaman yang diperlukan dengan @ Html.Partial ("_ Breadcrumb")
_Breadcrumb.cshtml
sumber
filterContext
variabel dari dalamGetDefaults()
?Anda bisa mendapatkan nama pengontrol atau nama tindakan dari tindakan seperti variabel apa pun. Mereka hanya spesial (controller dan action) dan sudah didefinisikan sehingga Anda tidak perlu melakukan sesuatu yang istimewa untuk mendapatkannya kecuali mengatakan Anda membutuhkannya.
Atau Anda dapat memasukkan controller, aksi dalam model Anda untuk mendapatkan dua dari mereka dan data kustom Anda.
sumber
Ini sepertinya bekerja dengan baik untuk saya (sejauh ini), juga berfungsi jika Anda menggunakan perutean atribut.
sumber
Untuk menghapus kebutuhan akan
ToString()
penggunaan panggilansumber
string actionName = this.ControllerContext.RouteData.Values ["action"]. ToString ();
string controllerName = this.ControllerContext.RouteData.Values ["controller"]. ToString ();
sumber
Mengapa tidak memiliki sesuatu yang lebih sederhana?
Panggil saja
Request.Path
, itu akan mengembalikan String Dipisahkan oleh "/"dan kemudian Anda dapat menggunakan
.Split('/')[1]
untuk mendapatkan Nama Pengendali.sumber
http://www.example.com/sites/site1/controllerA/actionB/
. MVC menyediakan banyak API untuk perutean, jadi mengapa Anda perlu mem-parsing (lagi) URL ?.controller/action