【问题标题】:Get Controllers index Viewbag title获取控制器索引 Viewbag 标题
【发布时间】:2015-02-18 01:31:45
【问题描述】:

如何获取控制器索引的 Viewbag 标题?

例如,如果我在 mysite.com/MyController/MyAction,我想从控制器索引中呈现 Viewbag 标题,即 mysite.com/MyController

索引的 Viewbag 标题将是“我的控制器”。

我尝试获取控制器名称并将其呈现为字符串,尽管这并不理想。我使用以下方法做到了:

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

【问题讨论】:

  • 我希望我明白你在问什么。 ViewBag 是如何与程序员提供的值以外的任何东西联系在一起的?
  • 您想为 MyController 的所有操作显示“My Controller”吗?在控制器的构造函数中设置 ViewBag.title 的值并不能达到你想要的效果?
  • @TMcKeown - 对不起,伙计,第一周使用 C# 哈哈。通常是 PHP 开发人员。如果有帮助,我正在创建一个基本的面包屑结构。渲染出当前动作的 Viewbag 标题,我需要将控制器名称显示为父级。

标签: c# asp.net-mvc razor asp.net-mvc-5


【解决方案1】:

我认为您指的是在 razor 视图/C# 代码块中填充的 Viewbag.title。 Viewbag.title 或 viewbag.ANYTHING 在控制器方法中编码或在视图 .cshtml 中设置,路由或任何其他 MVC 页面处理不会在 ViewBag 中设置任何值。

您可以像这样获取您的路线值:

RouteData route = RouteTable.Routes.GetRouteData(httpContext);
UrlHelper urlHelper = new UrlHelper(new RequestContext(httpContext, route));
var routeValueDictionary = urlHelper.RequestContext.RouteData.Values;

这个 SO 答案也有帮助: ASP.NET MVC C# Get controller and action name in class

【讨论】:

  • 目前我的每个视图都有一个ViewBag.Title正在设置中,例如:@{ViewBag.Title = "MyAction"}。如果我在我的页面上获得 ViewBag 标题,它将返回“MyAction”。我怎样才能得到“MyController”呢?
  • 你总是可以在你的控制器的构造函数中添加代码来设置ViewBag.ControllerName=GetType().Name;
猜你喜欢
  • 2020-10-14
  • 1970-01-01
  • 2016-01-03
  • 2021-04-15
  • 2018-05-24
  • 1970-01-01
  • 2020-02-13
  • 2011-05-09
  • 1970-01-01
相关资源
最近更新 更多