c# - 无法使用锚标记帮助程序使剃刀页面路由工作
问题描述
背景
这是我围绕 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>
问题
我正在努力使用锚标记助手来尊重路径 route /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。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}")
问题
是否有需要定义的进一步启动路线,或者我如何让锚标记助手尊重路径路线?
解决方案
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 页面的应用程序混合使用。
推荐阅读
- html - 带有文本和图像的 Vue Cards 幻灯片
- php - 将两个查询合并为一个有效查询
- npm - 如何使用 lerna 将 README.md 推送到 npm
- javascript - 通过操作从数组中删除一个项目
- java - Jetty 5.1.x 在 10 分钟后或“真正的本地连接”后启动
- java - 如何配置 DataBinder 以使用特定的语言环境来匹配逗号作为小数分隔符?
- sql - 包括空值在内的多个字段的 SQL Pivot 语法
- flutter - 如何在颤动的文本字段中创建输入掩码
- reactjs - 如何在我的 React 应用程序中引用位于应用程序目录之外的本地图像?
- javascript - Running a While function again, only if specific data has been loaded