Visualizza il controller corrente


127

Ho un in View - _Editcui vive News M/V/C.

Riutilizzo il V/Mvia CategoryControlleras:

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

In che modo View - _Editposso avvisare il nome del controller?

Quando io:

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

Il valore è: News tuttavia, l'URL è:/Category/foobar

C'è un modo per ottenere il valore 'Category'per avvisare? Grazie


non hai un NewsController?
cacciatore,

Si prega di pubblicare la vostra azione methodche sta caricando il partialviewe ciò controllerche methodesiste in.
cacciatore

Risposte:


193

Ho messo questo nella mia visione parziale:

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

nello stesso tipo di situazione che descrivi e mostra il controller descritto nell'URL (Categoria per te, Prodotto per me), anziché la posizione effettiva della vista parziale.

Quindi usa questo avviso invece:

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

25
La risposta di seguito di Palpie è una scorciatoia (più facile da ricordare):@ViewContext.RouteData.Values["controller"]
Laoujin

6
Solo un amico, non è necessario HttpContext.Current. Requestè disponibile direttamente.
Serj Sagan,

È possibile ottenere il nome completo della classe del controller incluso lo spazio dei nomi? Inoltre sarebbe bello poter anche mostrare il nome della vista.
Johncl,

3
tra l'altro, ["action"]funziona se si desidera il nome del metodo di azione.
Zapnologica,

117

Lo faccio in questo modo, ma forse è solo ASP.NET MVC 4

@ViewContext.RouteData.Values["controller"]

12
Tenere presente che la soluzione restituirà il controller attualmente in esecuzione. Pertanto, se un browser invia una richiesta per ControllerA e ControllerA esegue una visualizzazione parziale da ControllerB, la soluzione restituirà il nome di ControllerB, mentre la soluzione Nicholas Sizer restituirà il nome di ControllerA.
Thomas CG de Vilhena,

Dovrebbe essere accettato come la migliore risposta. Funziona ancora in ASP.NET Core 2.2
Tom

21

Crea una classe base per tutti i controller e inserisci qui l'attributo name:

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

In vista

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

Esempio di controller

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

Spiegare come Nameviene impostata la proprietà?
ErikE

13

Altro modo per ottenere il nome del controller corrente in Visualizza

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

5

Usa solo:

ViewContext.Controller.GetType().Name

Questo ti darà il nome dell'intero controller


2

Sei ancora nel contesto del tuo CategoryControlleranche se stai caricando un PartialViewdalla tua Views/Newscartella.


0

È possibile utilizzare uno dei seguenti codici per ottenere il nome del controller

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

Se si utilizza MVC 3 è possibile utilizzare

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.