我正在尝试通过将另一个具有相同名称的页面放置在“页面/覆盖”文件夹中来覆盖位于“页面/主题”中的现有“主题”页面。
我通过创建名为ThemeTemplatePageRouteModelConvention
的PageRouteModelConvention做到了这一点。没有“ / Overrides /”路由前缀的“ Pages / Overrides”文件夹中的任何页面都可以访问,并且优先于“ Pages / Theme”文件夹中类似命名的视图。
在此处查看我的示例存储库:https://github.com/bryandh/razor-page-override
在当前设置中,“页面/主题”中有三页:
以及“页面/替代”中的两页:
我希望这些页面具有的行为:
这可以按我希望的方式工作。
但是,使用锚标记帮助器在Pages / Theme / Components / _Header部分(而不是Pages / Theme中的非覆盖页面)中创建的锚标记无法创建正确的路由。
请参见包含_Header组件的根目录/索引页。关于页面链接也正确生成,因为关于页面也位于同一文件夹中。但是,“联系页面”链接似乎无法正确生成。仅当您位于“联系人”页面本身时,“联系人”页面的此链接才有效,因为它位于“页面/主题”中。
锚标记的生成似乎并没有考虑到可以将视图位置考虑在内的位置。
由于该链接位于我不想覆盖的组件中,因此无法修改asp-page
属性来解决此问题。
如何让Header组件从覆盖的Index页面生成到Contact Theme页面的链接?
[UPDATE]
为了进一步说明,请参见下面的页面覆盖结构。
asp-page
标签帮助程序无法找到“联系人”页面来为其创建路线。
注意:通过手动导航到/contact
,可以访问“联系人”页面 。