Asp.net 基于当前操作在ActionLink上设置@class
我有一个带有操作链接的简单菜单。它们都连接到同一个控制器。我希望它们有一个基本的HTML类,除非它们是活动的动作,否则我想设置另一个类。 链接只是在要显示的数据之间切换 我尝试了以下方法:Asp.net 基于当前操作在ActionLink上设置@class,asp.net,razor,Asp.net,Razor,我有一个带有操作链接的简单菜单。它们都连接到同一个控制器。我希望它们有一个基本的HTML类,除非它们是活动的动作,否则我想设置另一个类。 链接只是在要显示的数据之间切换 我尝试了以下方法: @Html.ActionLink("Oversikt", "Overview", "Statistics", null, new {@class= @(ViewContext.RouteData.Values["action"] as String == "Overview" ? "activeStatMe
@Html.ActionLink("Oversikt", "Overview", "Statistics", null, new {@class= @(ViewContext.RouteData.Values["action"] as String == "Overview" ? "activeStatMenuItem" : "statMenuItem") })
我认为它可能错过了ViewContext前面的@
,但这没有帮助,所以我尝试将所有内容都设置为字符串。这使得VisualStudio抱怨字符串(并且它也给出了一个编译错误)
如果我也把它添加到类中,比如
@Html.ActionLink("Oversikt", "Overview", "Statistics", null, new {@class= "@(ViewContext.RouteData.Values['action'] as String == 'Overview' ? 'activeStatMenuItem' : statMenuItem')" })
它将statMenuItem
-类添加到所有项中
让中间的字符串用<代码>“ySype”表示它停止抱怨,但不能解决我的问题——它只是将活动CSS类添加到所有的项目中。
我发现,如果我把所有的东西都做成一个长字符串,而没有“<代码> < <代码> >也不要<代码> > />代码中间,会使所有的东西停止抱怨,但它也似乎把每个表达式都计算为真,所以所有的项目都得到了活动的CSS类。 我对Visual Studio、ASP.NET和Razor(本项目于周四开始)都非常缺乏经验,因此我可能(/可能)错过了一些简单的东西。提前感谢您的耐心
非常感谢所有帮助!最简单的方法是创建一个变量,执行表示逻辑,然后将该字符串值分配给链接的@class
@{
var myClass = ViewContext.RouteData.Values["action"] as String == "Overview" ? "activeStatMenuItem" : "statMenuItem";
}
后来
@Html.ActionLink("Oversikt", "Overview", "Statistics", null, new {@class= myClass })
应该做的诀窍…希望你得到的想法,还没有测试它,所以它可能略有不同
把太多的步骤组合成一行从来都不是一个好主意。这样很难找到问题,也很难阅读和理解到底发生了什么。它成功了,非常感谢!我仍然想知道为什么这样做有效,但直接写出来却不行。你的引用(“)有问题,因此无法正确解析它。有很多方法可以逃避它,但它很快就会变得非常丑陋。