Saya ingin mengatur kelas CSS di halaman master saya, yang tergantung pada kontroler dan tindakan saat ini. Saya dapat membuka pengontrol saat ini ViewContext.Controller.GetType().Name
, tetapi bagaimana cara mendapatkan tindakan saat ini (mis . Index
, Show
Dll)?
c#
asp.net-mvc
kereta
sumber
sumber
Dalam RC Anda juga dapat mengekstrak data rute seperti nama metode tindakan seperti ini
Pembaruan untuk MVC 3
Pembaruan untuk MVC 4
Pembaruan untuk MVC 4.5
sumber
ViewContext.Controller.ValueProvider.GetValue("action").RawValue
variasi +Untuk mendapatkan Id saat ini pada Tampilan:
Untuk mendapatkan pengontrol saat ini:
sumber
ViewContext.RouteData.Values.ContainsKey(<key>)
dulu.Saya tahu ini adalah pertanyaan yang lebih lama, tetapi saya melihatnya dan saya pikir Anda mungkin tertarik pada versi alternatif daripada membiarkan pandangan Anda menangani mengambil data yang diperlukan untuk melakukan pekerjaan itu.
Cara yang lebih mudah menurut saya adalah mengganti metode OnActionExecuting . Anda melewati ActionExecutingContext yang berisi anggota ActionDescriptor yang dapat Anda gunakan untuk mendapatkan informasi yang Anda cari, yang merupakan ActionName dan Anda juga dapat mencapai ControllerDescriptor dan berisi ControllerName.
Semoga ini membantu. Jika ada, setidaknya itu akan menunjukkan alternatif bagi orang lain yang datang dengan pertanyaan Anda.
sumber
Saya melihat jawaban yang berbeda dan menghasilkan pembantu kelas:
Jadi dalam Tampilan (atau master / tata letak) Anda dapat menggunakannya seperti itu (Sintaks Razor):
Semoga ini bisa membantu.
sumber
Anda bisa mendapatkan data ini dari RouteData dari ViewContext
sumber
Di MVC Anda harus memberikan View dengan semua data, jangan biarkan View mengumpulkan datanya sendiri sehingga yang dapat Anda lakukan adalah mengatur kelas CSS dalam aksi controller Anda.
dan pilih nilai ini dari ViewData Anda di View Anda
sumber
Saya memilih 2 ini:
dan
Anda dapat mengambil kembali nama fisik tampilan saat ini dan tindakan yang memicunya. Ini dapat berguna di sebagian * halaman .acmx untuk menentukan wadah host.
sumber
Saya menggunakan ASP.NET MVC 4, dan ini yang bekerja untuk saya:
sumber
Memperluas jawaban Dale Ragan , contohnya untuk digunakan kembali, membuat kelas ApplicationController yang berasal dari Controller, dan pada gilirannya memiliki semua controller Anda yang lain berasal dari kelas ApplicationController daripada Controller.
Contoh:
Di ApplicationController baru Anda, buat properti bernama ExecutingAction dengan tanda tangan ini:
Dan kemudian dalam metode OnActionExecuting (dari jawaban Dale Ragan), cukup tetapkan ActionDescriptor ke properti ini dan Anda dapat mengaksesnya kapan pun Anda membutuhkannya di salah satu pengontrol Anda.
sumber
Ganti fungsi ini di controller Anda
sumber