我有一个带有actionlinks的简单菜单。他们都连接到同一个控制器。我希望他们有一个基本的HTML类,除非他们是主动,然后我想设置另一个类。 链接只是在要显示的数据之间切换。
我尝试过以下方法:
@Html.ActionLink("Oversikt", "Overview", "Statistics", null, new {@class= @(ViewContext.RouteData.Values["action"] as String == "Overview" ? "activeStatMenuItem" : "statMenuItem") })
我认为它可能错过了ViewContext前面的@
,但这并没有帮助,所以我尝试将所有东西都变成字符串。这使Visual Studio抱怨字符串(并且它也会产生编译错误)。
如果我也在类上添加它,比如;
@Html.ActionLink("Oversikt", "Overview", "Statistics", null, new {@class= "@(ViewContext.RouteData.Values['action'] as String == 'Overview' ? 'activeStatMenuItem' : statMenuItem')" })
它将statMenuItem
- 类添加到所有项目中。
使用'mystring'
表示中间的字符串使得它停止抱怨,但不能解决我的问题 - 它只是将活动的CSS类添加到所有项目。
我发现如果我只是制作一个长字符串,并且中间没有"
或'
,那么一切都停止抱怨,但似乎它也会评估每个表达式为true,所以所有项目都会获得活动的CSS类。
我对Visual Studio,ASP.NET和Razor都很缺乏经验(周四从这个项目开始),所以我可能(或可能)错过了一些简单的东西。提前感谢您的耐心等待。
非常感谢所有帮助!
答案 0 :(得分:1)
最简单的方法是创建变量,执行表示逻辑,然后将此字符串值分配给链接的@class。
@{
var myClass = ViewContext.RouteData.Values["action"] as String == "Overview" ? "activeStatMenuItem" : "statMenuItem";
}
然后再
@Html.ActionLink("Oversikt", "Overview", "Statistics", null, new {@class= myClass })
应该做的伎俩...希望你明白这个想法,没有测试过,所以它可能会略有不同。
将太多步骤合并为一行并不是一个好主意。很难以这种方式找到问题,而且更难以阅读和弄清楚,究竟发生了什么。