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.