在母版页中,我怎么知道我目前使用的是哪个控制器?是否有某种上下文对象,可以给我那种信息?
<ul>
<li>Fire</li>
<li>Ice</li>
<li>Water</li>
</ul>
<ul>
<li>Fire</li>
<li>Ice</li>
<li class="selected">Water</li>
</ul>
如果我的Site.master中有一个菜单,其中每个菜单项指的是不同的控制器,我如何根据我目前所在的控制器突出显示每个菜单项?
我知道我可以从request.Servervariables获取url然后使用一些字符串魔法,但必须有更好的方法 - 某种上下文对象?
答案 0 :(得分:2)
ViewMasterPage的ViewContext属性包含请求的Controller和RouteData。您可以查看控制器的类型名称或路由数据中的controller
键,以找出调用的控制器。
答案 1 :(得分:1)
你可以做一个
ViewContext.Controller.GetType()。名称
应该这样做。
答案 2 :(得分:1)
这里有两个辅助方法,用于检查它是当前控制器还是当前操作。您可以使用帮助程序来确定是否添加class =“selected”。
public static bool IsCurrentController(this HtmlHelper helper,
string controllerName)
{
string currentControllerName = (string)helper.ViewContext.RouteData.
Values["controller"];
if (currentControllerName.Equals(controllerName,
StringComparison.CurrentCultureIgnoreCase))
{
return true;
}
return false;
}
public static bool IsCurrentAction(this HtmlHelper helper, string actionName,
string controllerName)
{
string currentControllerName = (string)helper.ViewContext.RouteData
.Values["controller"];
string currentActionName = (string)helper.ViewContext.RouteData
.Values["action"];
if (currentControllerName.Equals(controllerName,
StringComparison.CurrentCultureIgnoreCase) &&
currentActionName.Equals(actionName,
StringComparison.CurrentCultureIgnoreCase))
{
return true;
}
return false;
}