无法使用锚标记帮助程序使剃刀页面路由正常工作

2024-04-08

背景

这是一个后续问题最初的问题 https://stackoverflow.com/questions/60223804/multiple-routes-to-the-same-razor-page/60257348我询问了 asp.net core v3.1 razor 页面路由。

我按照解决方案中的建议将以下内容添加到启动中here https://stackoverflow.com/a/60257348/6479619这使我能够以我想要的两种方式路由到剃刀页面:

services.AddMvc()
        .AddRazorPagesOptions(options => 
                 options.Conventions.AddAreaPageRoute("Identity", "/account/signupandapply", "/identity/account/signup")
        );
/identity/account/signup
/identity/account/signupandapply/<fooapplyid>

Issue

我正在努力使用锚标记助手来尊重路径路线/identity/account/signupandapply/<fooapplyid>。 href 显示使用参数代替/identity/account/signupandapply?fooapplyid=<fooapplyid>。这是我的锚标记帮助器标记:

<a asp-area="identity" asp-page="/account/signupandapply" asp-route-fooapplyid="@Model.FooApplyId">Apply here</a>

目前,我正在手动设置 href,但想知道如何使用标签助手来使其工作。

<a href="/identity/account/signupandapply/@Model.FooApplyId">Apply here</a>

Note:锚标记被添加到标识区域之外的视图中。

尝试过

我尝试添加下面的内容,显示我想要的 href 。 IE/identity/account/signupandapply/<fooapplyid>

.AddAreaPageRoute("Identity", "/account/signupandapply", "/identity/account/signupandapply/{applyid}")

但是当我转到该页面时出现错误,这是有道理的

AmbiguousMatchException: The request matched multiple endpoints. Matches: /Account/SignUpAndApply /Account/SignUpAndApply

这些都不起作用,href 仍然显示为 ?applyid=:

.AddAreaPageRoute("Identity", "/account/signupandapply?applyid=", "/identity/account/signupandapply/{applyid}")

.AddAreaPageRoute("Identity", "/account/signupandapply/{applyid?}", "/identity/account/signupandapply/{applyid}")

Question

是否还有需要定义的进一步启动路线,或者如何让锚标记助手尊重路径路线?


AddAreaPageRoute("Identity", "/account/signupandapply", "/identity/account/signup")

去引用the docs https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.pageconventioncollectionextensions.addareapageroute?view=aspnetcore-3.1#Microsoft_Extensions_DependencyInjection_PageConventionCollectionExtensions_AddAreaPageRoute_Microsoft_AspNetCore_Mvc_ApplicationModels_PageConventionCollection_System_String_System_String_System_String_关于这一点(强调我的):

conventions.AddAreaPageRoute(string areaName, string pageName, string route)

添加指定的route到指定的页面pageName位于指定区域。

该页面可以通过以下方式路由route除了默认的基于路径的路由集之外。为此页面生成的所有链接都将使用指定的路由。

所以这个约定有效地告诉路由使用/identity/acount/signup从现在开始生成所有链接,同时接受传入的路由来命中both这些路线。

不幸的是,我认为您无法使用页面约定更好地控制它。 Razor 页面并不真正适合路由模型,您可以通过不同的路由到达同一页面。毕竟,Razor 页面是以页面为中心而不是像 MVC 操作那样以路由为中心。

因此,如果这对您来说是一项硬性要求,您可能需要考虑针对这一用例使用控制器,而不是呈现相同的视图。就其价值而言,控制器确实可以与使用 Razor 页面的应用程序很好地混合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法使用锚标记帮助程序使剃刀页面路由正常工作 的相关文章

随机推荐