如何将HTML链接转换为带href与aria-expanded属性的ASP.NET MVC ActionLink?
解决ASP.NET MVC ActionLink添加href和aria-expanded属性的问题
嘿,我来帮你搞定这个问题!先给你梳理清楚两个关键点,顺便纠正下你代码里的小问题:
1. 关于href属性
你完全不需要手动添加href!@Html.ActionLink的核心作用就是根据你指定的动作名(Action)、**控制器名(Controller)**和路由参数,自动生成正确的href属性值。比如你写的代码里,它会自动生成指向Project控制器下ProjectDetails动作的链接地址,不需要额外手动指定。
2. 添加aria-expanded属性(顺便修正参数顺序)
你原来的代码参数顺序有点问题哦!你把@class放到了路由参数的位置,而不是HTML属性的位置,这会导致生成的URL里多出?class=has-arrow这样的无效参数,而不是给a标签加上class属性。
正确的做法是使用ActionLink的五参数重载,把路由参数(如果不需要就传null)和HTML属性分开:
方法一:使用匿名对象(用下划线代替短横线)
C#不允许匿名对象的属性名带短横线,所以我们用下划线,Razor会自动帮我们转换成HTML属性的短横线格式:
@Html.ActionLink("Project", "ProjectDetails", "Project", null, new { @class = "has-arrow", aria_expanded = "false" })
这样生成的HTML会是:
<a href="/Project/ProjectDetails" class="has-arrow" aria-expanded="false">Project</a>
方法二:使用Dictionary定义HTML属性
如果你更习惯直接写带短横线的属性名,可以用Dictionary<string, object>来定义:
@{ var htmlAttributes = new Dictionary<string, object> { { "class", "has-arrow" }, { "aria-expanded", "false" } }; } @Html.ActionLink("Project", "ProjectDetails", "Project", null, htmlAttributes)
这个方法和上面的效果完全一样,只是写法不同,适合属性较多或者属性名比较特殊的场景。
内容的提问来源于stack exchange,提问作者Aly-Elgarhy
相关产品推荐
相关产品推荐

