我在使用MVC 5中的ActionLink时遇到了问题。
@Html.ActionLink("View Commissions", "/" + item.Id.ToString, "Commissions")
@Html.ActionLink("View Commissions", "Index", "Commissions", New With {Key .payRollId = item.Id}, Nothing)
这两个ActionLink应该完成同样的事情,但我更愿意使用第二个。不幸的是,他们生成不同的URL。第一个创建http://mysite/Commissions/3
。第二个创建http://mysite/Commissions?payRollId=3
。
在我的佣金控制器中,我有以下代码:
' GET: Commissions/5
<Route("Commissions/{payRollId:min(1)}")>
Async Function Index(ByVal payRollId As Integer?) As Task(Of ActionResult)
If IsNothing(payRollId) Then
Return New HttpStatusCodeResult(HttpStatusCode.BadRequest)
End If
Return View(Await ...query...).ToListAsync)
End Function
这成功处理了第一个ActionLink的URL。第二个导致404错误。对于佣金,我没有任何其他RouteAttributes或映射路由。根据这个attribute routing article,第二个ActionLink应该创建成功处理请求的漂亮URL(没有查询字符串)。
我错过了什么?如何让第二个ActionLink生成正确的URL(Commissions/3
)以匹配RouteAttribute?
答案 0 :(得分:1)
修改强>
这应该产生所需的路线:
<a href="~/Commissions/@item.Id">View Commissions</a>
这假设您启用了基于属性的路由,如下所示:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
}
答案 1 :(得分:0)
我有部分解决方案。我使用控制器代码,发现将RouteAttribute更改为<Route("Commissions/{payRollId:min(1)?}")>
(注意最后的?
)允许它处理第二个URL。
我仍然在研究如何使用第二个ActionLink生成一个漂亮的URL。如果我解决这个问题,我会更新这个答案。