在我的应用中,我正在创建一个动态菜单。根据所要求的控制器填充菜单。例如,我的一个控制器名称是Organization。要填充它的菜单,我称之为
@Html.Action("Menu","Site", new { calledForController = "Organization", oId = @Model.Id })
一切都很顺利,但我遇到的问题是因为我有更多的观点,所以我必须在每个视图中加上上面的一行。我正在寻找的是从路由数据中获取当前控制器和操作名称的方法,这样我就不必在每个视图上调用它。
理想的解决方案是写这样的东西
@Html.Action("Menu","Site")
在我的_Layout.cshtml中,然后在菜单控制器中填充菜单列表,具体取决于调用它的位置。
如果我写
this.ControllerContext.RouteData.Values["controller"].ToString();
在我的网站控制器的菜单操作中,我总是将网站作为我的控制器名称。有什么想法吗?
答案 0 :(得分:1)
我已经搜索过,发现这是一个适合我的解决方案,让路由数据使用这个
var routeValues = HttpContext.Request.RequestContext.RouteData.Values;
if (routeValues.ContainsKey("id"))
oId = (String)routeValues["id"];
这种方式在我的_Layout.cshtml中我可以写这个
@Html.Action("Menu","Site")
现在我不必一次又一次地传递额外的控制器。