Mevcut denetleyiciyi görünümde alın


127

Bir var View - _Edityaşıyor hangi News M/V/C.

Ben yeniden V/Maracılığıyla CategoryControllergibidir:

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

View - _EditKontrolör adını içerisinden nasıl uyarabilirim?

Ne zaman ben:

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

Değer şudur: News Ancak, URL:/Category/foobar

Değeri 'Category'uyarmanın bir yolu var mı ? Teşekkürler


sende yok NewsControllermu
hunter

Lütfen methodyükleyen eyleminizi partialviewve controlleriçinde methodvar olanı gönderin .
hunter

Yanıtlar:


193

Bunu kısmi görüşüme koydum:

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

tarif ettiğiniz durumla aynıdır ve kısmi görünümün gerçek konumu yerine URL'de açıklanan denetleyiciyi gösterir (Sizin için Kategori, Benim için Ürün).

Bu yüzden bunun yerine şu uyarıyı kullanın:

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

25
Palpie'nin aşağıdaki cevabı (hatırlaması daha kolay) bir kısayol:@ViewContext.RouteData.Values["controller"]
Laoujin

6
Sadece bir fyi, almana gerek yok HttpContext.Current. Requestdoğrudan mevcuttur.
Serj Sagan

Ad alanı dahil tam denetleyici sınıf adını almak mümkün mü? Ayrıca görünüm adını da gösterebilmek harika olurdu.
Johncl

3
btw, ["action"]eylem yönteminin adını istiyorsanız çalışır.
Zapnologica

117

Bunu böyle yapıyorum ama belki de sadece ASP.NET MVC 4

@ViewContext.RouteData.Values["controller"]

12
Çözümünüzün şu anda yürütülmekte olan denetleyiciyi döndüreceğini unutmayın. Bu nedenle, bir tarayıcı ControllerA için bir istekte bulunursa ve ControllerA, ControllerB'den kısmi bir görünüm oluşturursa, çözümünüz ControllerB'nin adını, Nicholas Sizer çözümü ise ControllerA'nın adını döndürecektir.
Thomas CG de Vilhena

En iyi cevap olarak kabul edilmelidir. Bu hala ASP.NET Core 2.2'de çalışıyor
Tom

21

Tüm denetleyiciler için temel sınıf oluşturun ve buraya ad özniteliğini koyun:

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

Görünümünde

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

Denetleyici örneği

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

Lütfen Namemülkün nasıl ayarlandığını açıklayın.
ErikE

13

Geçerli Denetleyici adını Görünüm'de almanın diğer yolu

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

5

Sadece kullan:

ViewContext.Controller.GetType().Name

Bu size Kontrolörün Adının tamamını verecektir


2

Sen senin bağlamında hala CategoryControllerbir yüklüyoruz rağmen PartialViewsizin gelen Views/Newsklasöründe.


0

Denetleyici adını almak için aşağıdaki kodlardan herhangi birini kullanabilirsiniz

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

MVC 3 kullanıyorsanız kullanabilirsiniz

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.