Получить текущий контроллер
У меня есть 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