ASP.NET MVC Razor中@Html.ActionLink跨文件夹跳转404问题求助
解决Html.ActionLink生成错误URL的问题
你的问题出在对Html.ActionLink参数的理解上——你把完整路径当成了action名称传入,导致MVC错误地将它拼接在了当前控制器的路径下面。
这里有两种简单的修复方式:
方式一:正确使用ActionLink的重载参数
Html.ActionLink的标准重载中,第二个参数是Action方法名,第三个参数是控制器名(不需要加Controller后缀)。把你的代码改成这样:
@Html.ActionLink("Order", "ProductList", "Products", new { id = Model.ID }, new { @class = "link-button btn-primary" })
这样MVC的路由系统会自动生成根路径下的正确URL:http://localhost:63549/Products/ProductList/1。
方式二:用Url.Action生成URL后手动写a标签
如果你更习惯直接控制URL生成,也可以先用Url.Action得到正确的路径,再嵌套到<a>标签里:
<a href="@Url.Action("ProductList", "Products", new { id = Model.ID })" class="link-button btn-primary">Order</a>
Url.Action同样会根据你指定的控制器和Action生成根路径的URL,效果和第一种方式一致。
为什么原来的写法会出错?
你之前传入的"/Products/ProductList"被MVC当作了当前控制器(CustomerOrder)下的Action名称,而不是根路径的URL。所以路由系统会把它拼接在当前控制器的路径后面,最终生成了错误的CustomerOrder/Products/ProductList/1。
内容的提问来源于stack exchange,提问作者user3020047
相关产品推荐
相关产品推荐

