如何在.NET Core MVC中生成带#id的动作链接?
在.NET Core MVC中生成带锚点的完整URL
我明白你要的是直接生成类似http://localhost:5013/Home/Glossary#Agnikumara这种包含锚点的完整URL字符串,而不是生成带id属性的<a>标签——之前搜到的方案大多用Html.ActionLink这类辅助方法,它们确实会生成带id的标签,这和你的需求不符。
下面是两种可靠的实现方式,都能直接生成你需要的URL格式:
方法1:手动拼接锚点
利用Url.Action生成基础路由URL,再直接拼接锚点部分:
<a href="@(Url.Action("Glossary", "Home") + "#Agnikumara")">Agnikumara</a>
如果需要生成绝对URL(包含主机和端口),可以补充协议和主机参数:
<a href="@(Url.Action("Glossary", "Home", null, Request.Scheme, Request.Host.Value) + "#Agnikumara")">Agnikumara</a>
方法2:使用fragment路由参数
.NET Core MVC的URL辅助方法支持一个特殊的fragment参数,会自动将其转换为URL的锚点部分:
<a href="@Url.Action("Glossary", "Home", new { fragment = "Agnikumara" })">Agnikumara</a>
同样,要生成绝对URL的话,加上协议和主机参数即可:
<a href="@Url.Action("Glossary", "Home", new { fragment = "Agnikumara" }, Request.Scheme, Request.Host.Value)">Agnikumara</a>
为什么之前的方案不对?
你搜到的带id属性的锚标签,大多是用了Html.ActionLink的htmlAttributes参数,比如:
@Html.ActionLink("Agnikumara", "Glossary", "Home", null, new { id = "Agnikumara" })
这个方法的最后一个参数是用来设置<a>标签本身的HTML属性的,所以会生成带id="Agnikumara"的标签,而不是把锚点加到URL里——这和你的需求完全是两回事,所以要避开这种写法,改用Url.Action来构造URL字符串,再自己包裹<a>标签。
内容的提问来源于stack exchange,提问作者J86
相关产品推荐
相关产品推荐

