ASP .NET Core 2.1 Razor Pages锚点标签助手生成asp-route的空href

4
我的锚点辅助函数在使用asp-route属性时会生成空的href。我确定我漏掉了什么。
启动 -> ConfigureServices:
services.AddRouting();
services.AddMvc()
            .AddRazorPagesOptions(options =>
            {
                options.Conventions.AddPageRoute("/user/signin", "signin");
            })
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

然后在Razor视图中:
 <a asp-route="signin">Sign In</a>

这将生成

<a href="">Sign In</a>

如果我导航到 /signin 页面,它会正确跳转到 /user/signin 页面。

2个回答

4
asp-route标签助手要求提供的值为命名路由

asp-route属性用于创建直接链接到命名路由的URL。

如果您想链接到ASP.NET Core Razor页面,可以使用asp-page

<a asp-page="/user/signin">Sign In</a>

这将生成类似以下内容的东西:
<a href="/signin">Sign In</a>

所以 asp-route 要求 Route 属性装饰吗?我现在进行了测试,将 [Route("/user/signin", Name = "signin")] 添加到 OnGetAsync 中,然后 <a asp-route="signin"... ,但它仍会生成空的 href。 - rnz
我认为ASP.NET Core Razor Pages不支持使用[Route]或例如[HttpGet]。这里有一个讨论(链接在此处)建议我的理解是正确的。 - Kirk Larkin
谢谢,看起来RedirectToRoute在Razor Pages中也不起作用,它没有考虑通过options.Conventions.AddPageRoute定义的路由。 - rnz
你需要使用 RedirectToPage,并设置一个类似于我的示例的值。 - Kirk Larkin
RedirectToPage和asp-page对我很有用。我只是认为在使用路由时,RedirectToRoute和asp-route可能是更合适的方式,但现在清楚了它们只能与MVC一起使用,而不支持Razor Pages。 - rnz

0
我在使用一个名为的webapp项目时遇到了同样的问题,使用了dotnet new webapp命令创建了这个项目,并且使用了
我的页面结构如下:
/Pages/Index.cshtml
/Pages/Admin/Orders/OrderList.cshtml
/Pages/Admin/Orders/OrderDetail.cshtml

OrderList.cshtml中,我想要链接到OrderDetail.cshtml并将OrderId传递给页面OrderDetail.cshtml。在页面OrderList.cshtml中,我添加了以下内容。
<!-- /Pages/Admin/Orders/OrderList.cshtml -->
<a asp-page="/Admin/Orders/OrderDetail"  
               asp-route-id="@order.OrderId">@order.OrderId</a>

href 只有在路径正确时才会有值。我犯了一个错误,使用了 ~/Admin/...(错误的)而不是 /Admin/...(正确的)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接