Получить текущий контроллер в поле зрения - PullRequest
124 голосов
/ 28 июля 2011

У меня есть 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' для предупреждения?спасибо

Ответы [ 7 ]

190 голосов
/ 28 июля 2011

Я поместил это в свое частичное представление:

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

в той же самой ситуации, которую вы описываете, и вместо этого он показывает контроллер, описанный в URL (Категория для вас, Продукт для меня), вместо этогофактического местоположения частичного представления.

Поэтому используйте это предупреждение вместо:

alert('@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString()');
115 голосов
/ 10 января 2013

Я делаю это так, но, возможно, это только ASP.NET MVC 4

@ViewContext.RouteData.Values["controller"]
21 голосов
/ 12 октября 2013

Создать базовый класс для всех контроллеров и поставить здесь атрибут 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"; } 
    }
13 голосов
/ 16 августа 2011

Другой способ получить текущее имя контроллера в представлении

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
2 голосов
/ 17 августа 2017

Просто используйте:

ViewContext.Controller.GetType().Name

Это даст вам полное имя контроллера

2 голосов
/ 28 июля 2011

Вы по-прежнему находитесь в контексте вашего CategoryController, даже если вы загружаете PartialView из папки Views/News.

0 голосов
/ 05 августа 2016

Вы можете использовать любой из приведенного ниже кода для получения имени контроллера

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

Если вы используете MVC 3, вы можете использовать @ ViewContext.Controller.ValueProvider.GetValue ("controller"). RawValue

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...