Dapatkan pengontrol saat ini dalam tampilan


127

Saya memiliki View - _Edityang tinggal diNews M/V/C .

Saya menggunakan kembali V/Mvia CategoryControllersebagai:

return PartialView("/Views/News/_Edit.cshtml", model);

Bagaimana dari dalam View - _Editsaya bisa memberitahukan nama pengontrol?

Ketika saya:

alert('@ViewContext. RouteData.Values["controller"].ToString()');

Nilainya adalah: News Namun, URL-nya adalah:/Category/foobar

Apakah ada cara untuk mendapatkan nilai 'Category'untuk mengingatkan? Terima kasih


kamu tidak punya NewsController?
pemburu

Silakan kirim tindakan Anda methodyang memuat partialviewdan apa controlleryang methodada di.
hunter

Jawaban:


193

Saya telah menempatkan ini dalam pandangan sebagian saya:

@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString()

dalam situasi yang sama seperti yang Anda jelaskan, dan itu menunjukkan pengontrol yang dijelaskan dalam URL (Kategori untuk Anda, Produk untuk saya), alih-alih lokasi sebenarnya dari tampilan sebagian.

Jadi, gunakan lansiran ini sebagai gantinya:

alert('@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString()');

25
Jawaban di bawah oleh Palpie adalah jalan pintas (lebih mudah diingat):@ViewContext.RouteData.Values["controller"]
Laoujin

6
Hanya fyi, kamu tidak perlu mendapatkannya HttpContext.Current. Requesttersedia langsung.
Serj Sagan

Apakah mungkin untuk mendapatkan nama kelas kontroler penuh termasuk namespace? Juga akan keren untuk juga dapat menampilkan nama tampilan.
Johncl

3
btw, ["action"]berfungsi jika Anda ingin nama metode tindakan.
Zapnologica

117

Saya melakukannya seperti ini, tapi mungkin itu hanya ASP.NET MVC 4

@ViewContext.RouteData.Values["controller"]

12
Ingatlah bahwa solusi Anda akan mengembalikan pengontrol yang saat ini sedang dijalankan. Oleh karena itu, jika browser membuat permintaan untuk ControllerA, dan ControllerA membuat sebagian tampilan dari ControllerB, solusi Anda akan mengembalikan nama ControllerB, sementara solusi Nicholas Sizer akan mengembalikan nama ControllerA.
Thomas CG de Vilhena

Harus diterima sebagai jawaban terbaik. Ini masih bekerja di ASP.NET Core 2.2
Tom

21

Buat kelas dasar untuk semua pengontrol dan letakkan di sini nama atribut:

public abstract class MyBaseController : Controller
{
    public abstract string Name { get; }
}

Dalam penglihatan

@{
    var controller = ViewContext.Controller as MyBaseController;
    if (controller != null)
    {
       @controller.Name
    }
}

Contoh pengontrol

 public class SampleController: MyBaseController 
    { 
      public override string Name { get { return "Sample"; } 
    }

Tolong jelaskan bagaimana Nameproperti diatur?
ErikE

13

Cara lain untuk mendapatkan nama Pengendali saat ini di Tampilan

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue

5

Cukup gunakan:

ViewContext.Controller.GetType().Name

Ini akan memberi Anda seluruh Nama Pengendali


2

Anda masih dalam konteks Anda CategoryControllermeskipun Anda sedang memuat PartialViewdari Views/Newsfolder Anda .


0

Anda dapat menggunakan salah satu kode di bawah ini untuk mendapatkan nama controller

@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();

Jika Anda menggunakan MVC 3, Anda dapat menggunakan

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.