Перегляньте поточний контролер


127

У мене є View - _Editяке живе News M/V/C.

Я повторно використовую V/Mчерез CategoryController:

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

Як зсередини View - _Editможна попередити ім'я контролера?

Коли я:

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

Значення: News Однак URL-адреса така:/Category/foobar

Чи є спосіб отримати значення 'Category'для сповіщення? Дякую


у вас немає NewsController?
мисливець

Будь ласка, опублікуйте свою дію, methodяка завантажує partialviewі controllerщо methodіснує в.
мисливець

Відповіді:


193

Я поставив це як часткове уявлення:

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

у тій самій ситуації, яку ви описуєте, і вона показує контролер, описаний у URL-адресі (Категорія для вас, Продукт для мене), а не фактичне місцезнаходження часткового подання.

Тож використовуйте замість цього попередження:

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

25
Відповідь Palpie нижче - це (легше запам’ятати) ярлик:@ViewContext.RouteData.Values["controller"]
Laoujin

6
Просто фій, не потрібно отримувати HttpContext.Current. Requestдоступний безпосередньо.
Serj Sagan

Чи можна отримати повне ім'я класу контролера, включаючи простір імен? Також було б круто, щоб також можна було показати ім'я перегляду.
Джонкл

3
btw, ["action"]працює, якщо ви хочете назвати метод дії.
Zapnologica

117

Я це роблю так, але, мабуть, це лише ASP.NET MVC 4

@ViewContext.RouteData.Values["controller"]

12
Майте на увазі, що ваше рішення поверне контролер, який зараз виконується. Отже, якщо веб-переглядач подає запит на ControllerA, а ControllerA надає частковий перегляд від ControllerB, ваше рішення поверне ім'я ControllerB, тоді як рішення Nicholas Sizer поверне ім'я ControllerA.
Thomas CG de Vilhena

Слід прийняти як найкращу відповідь. Це працює досі в ASP.NET Core 2.2
Том

21

Створіть базовий клас для всіх контролерів і поставте тут атрибут name:

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

У виду

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

Приклад контролера

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

Поясніть, будь ласка, як встановлюється Nameвластивість?
ЕрікЕ


5

Просто використовуйте:

ViewContext.Controller.GetType().Name

Це дасть вам ім'я всього контролера


2

Ви все ще перебуваєте в контексті своєї програми, CategoryControllerхоча ви завантажуєте файл PartialViewзі своєї Views/Newsпапки.


0

Ви можете використовувати будь-який із наведених нижче кодів, щоб отримати ім'я контролера

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

Якщо ви використовуєте MVC 3, ви можете використовувати

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.