ASP.NET Core中如何通过Href正确调用控制器与Action?
解决ASP.NET MVC中Index Action链接重复路径的问题
嘿,我明白你遇到的困扰了——第一次点击链接一切正常,第二次就出现路径重复的错误,这其实是相对路径的基准问题导致的。下面给你几个靠谱的解决办法,帮你彻底搞定这个问题:
方法1:使用Html.ActionLink(推荐,MVC原生方案)
ASP.NET MVC提供了专门的HTML辅助方法,能自动根据你配置的路由规则生成正确的URL,完全不用手动拼接路径,还能避免路径错误:
@Html.ActionLink("Roma", "Index", "Home", new { City = 0 }, null) @Html.ActionLink("Firenze", "Index", "Home", new { City = 1 }, null)
参数说明:
- 第一个参数:链接显示的文本(比如"Roma")
- 第二个参数:要调用的Action名称("Index")
- 第三个参数:目标控制器名称("Home")
- 第四个参数:传递的路由参数(这里就是
City=0) - 最后一个参数:可选的HTML属性(不需要的话传
null即可)
方法2:用Url.Action生成正确的href值
如果你想自己写原生的<a>标签,也可以用Url.Action生成标准URL,把它放在href属性里:
<a href="@Url.Action("Index", "Home", new { City = 0 })">Roma</a> <a href="@Url.Action("Index", "Home", new { City = 1 })">Firenze</a>
这个方法会自动生成基于网站根目录的URL,不管当前页面处于什么路径下,都不会出现拼接错误。
方法3:直接使用绝对路径(简单直接)
如果不想用MVC的辅助方法,也可以直接写以/开头的绝对路径,让浏览器从网站根目录开始解析:
<a href="/Home/Index?City=0">Roma</a> <a href="/Home/Index?City=1">Firenze</a>
注意这里去掉了路径里多余的/,直接写成/Home/Index?City=0就可以,不需要加/?。
为什么原来的链接会出错?
当你第一次点击后,当前页面的URL是http://localhost:60335/Home/Index/?City=0,此时页面的基准路径是/Home/Index/,再点击相对路径Home/Index/?City=1,浏览器会把它拼在基准路径后面,就变成了/Home/Index/Home/Index/?City=1,这就是重复路径的根源。而上面的三种方法都能规避这个问题,确保每次生成的URL都是正确的根路径开头。
内容的提问来源于stack exchange,提问作者user1238784
相关产品推荐
相关产品推荐

