[英]Can't get razor page route to work using anchor tag helper
背景
这是我围绕 asp.net core v3.1 razor 页面路由提出的初始问题的后续问题。
我按照此处的解决方案中的建议将以下内容添加到启动中,这允许我以我想要的两种方式路由到剃刀页面:
services.AddMvc()
.AddRazorPagesOptions(options =>
options.Conventions.AddAreaPageRoute("Identity", "/account/signupandapply", "/identity/account/signup")
);
/identity/account/signup
/identity/account/signupandapply/<fooapplyid>
问题
我正在努力使用锚标记助手来尊重路径路由/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>
注意:锚标记被添加到标识区域之外的视图中。
尝试过
我试过添加下面的内容来显示我想要的href。 即/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}")
题
是否有进一步的启动路线需要定义,或者我如何让锚标签助手尊重路径路线?
AddAreaPageRoute("Identity", "/account/signupandapply", "/identity/account/signup")
引用有关此的文档(强调我的):
conventions.AddAreaPageRoute(string areaName, string pageName, string route)
将指定
route
添加到位于指定区域的指定pageName
处的页面。除了默认的基于路径的路由集之外,该页面还可以通过
route
进行路由。 为此页面生成的所有链接都将使用指定的路由。
所以这个约定有效地告诉路由从现在开始使用/identity/acount/signup
路由来生成所有链接,同时接受传入路由以命中这两个路由。
不幸的是,我认为您无法使用页面约定更好地控制它。 Razor 页面并不真正适合路由模型,在这种模型中,您可以通过不同的路线到达同一页面。 毕竟,Razor 页面是以页面为中心的,而不是像 MVC 操作那样以路由为中心。
因此,如果这对您来说是一项硬性要求,您可能需要考虑在这个用例中使用控制器,而不是呈现相同的视图。 就其价值而言,控制器确实与使用 Razor 页面的应用程序很好地混合在一起。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.