Visual Studio MVC项目中如何让链接正确指向控制器并避免路径残留?
解决ASP.NET Core导航链接意外保留Action路由值的问题
你遇到的问题是ASP.NET Core Tag Helper的路由值继承特性导致的:当你没有在<a>标签上显式指定asp-action属性时,Tag Helper会自动沿用当前请求上下文里的路由参数(比如当前页面的action值)。
比如你在Home/Privacy页面时,当前路由的action是Privacy,点击未指定asp-action的Welcome链接时,Tag Helper会把这个action值继承过来,最终生成Welcome/Privacy的URL,而不是预期的Welcome。
解决方法
给Welcome的导航链接显式指定asp-action="Index"即可,修改后的代码如下:
<ul class="navbar-nav flex-grow-1"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Welcome" asp-action="Index">Welcome</a> </li> </ul>
原理说明
ASP.NET Core的Tag Helper会优先使用你显式指定的路由参数,当某个参数未指定时,会尝试从当前请求的路由数据中填充。显式设置asp-action="Index"后,就会强制使用控制器的默认Action,不再继承当前页面的Action值,从而生成正确的/Welcome(或/Welcome/Index,路由系统会自动匹配默认Action)。
内容的提问来源于stack exchange,提问作者Cristian Jacob Jimenez
相关产品推荐
相关产品推荐

