Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net MVC5中带属性路由的ActionLink_Vb.net_Asp.net Mvc 5_Asp.net Mvc Routing_Actionlink_Attributerouting - Fatal编程技术网

Vb.net MVC5中带属性路由的ActionLink

Vb.net MVC5中带属性路由的ActionLink,vb.net,asp.net-mvc-5,asp.net-mvc-routing,actionlink,attributerouting,Vb.net,Asp.net Mvc 5,Asp.net Mvc Routing,Actionlink,Attributerouting,MVC5中的ActionLink有问题 @Html.ActionLink("View Commissions", "/" + item.Id.ToString, "Commissions") @Html.ActionLink("View Commissions", "Index", "Commissions", New With {Key .payRollId = item.Id}, Nothing) 这两个ActionLink应该完成相同的任务,但我更愿意使用第二个。不幸的是,它们产生不同

MVC5中的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
获取:佣金/5 异步函数索引(ByVal payRollId为整数?)作为任务(ActionResult的) 如果没有(payRollId),则 返回新的HttpStatusCodeResult(HttpStatusCode.BadRequest) 如果结束 返回视图(等待…查询…。ToListSync) 端函数 这将成功处理第一个ActionLink的URL。第二个错误导致404错误。我没有任何其他路由属性或用于佣金的映射路由。根据这一点,第二个ActionLink应该创建成功处理请求的漂亮URL(没有查询字符串)

我错过了什么?如何获取第二个ActionLink以生成与RouteAttribute匹配的正确URL(
Commissions/3

这将产生所需的路线:

<a href="~/Commissions/@item.Id">View Commissions</a>

我有一个局部解决方案。我使用了控制器代码,发现将RouteAttribute更改为
(注意末尾的
)可以处理第二个URL


我还在研究如何使用第二个ActionLink生成一个漂亮的URL。如果我解决了这个问题,我会更新它。

谢谢你的帮助。不幸的是,这会产生
http://mysite/Commissions/Index/3
它与RouteAttribute不匹配并导致404错误。也许我应该在控制器中创建另一个操作,但它似乎是多余的。如果我使用该选项,我只需将当前路线属性更改为包含
索引
。那么您想要的完整路线是什么?我以为你的控制员叫佣金控制员。不是吗?我想要的完整路线是
http://mysite/Commissions/{payRollId}
其中
payRollId
是一个整数。虽然操作是“索引”,但实际URL中忽略了它。该控制器不是CommissionController(它长得多,并且是使用脚手架选项自动生成的)。请编辑我的答案以适应非常规路线。就我所知,@Html.ActionLink助手对非常规(即基于属性的)路由没有帮助。可以想象,可以创建自己的助手来完成这项工作,但利用Razor通过~/处理基本路线并直接使用锚定标记可能会更快。
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 });
    }
}