Получить текущий контроллер

У меня есть View - _Edit, который живет в News M/V/C.

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

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

Как из View - _Edit можно предупредить имя контроллера?

Когда I:

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

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

Есть ли способ получить значение 'Category' для предупреждения? спасибо

Ответ 1

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

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

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

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

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

Ответ 2

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

@ViewContext.RouteData.Values["controller"]

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

ViewContext.Controller.GetType().Name

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

Ответ 7

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

@HttpContext.Current.Request.RequestContext.RouteData.Values ​​[ "контроллер" ] ToString();.

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