【问题标题】:Razor pages route to a page in a different areaRazor 页面路由到不同区域中的页面
【发布时间】:2022-05-19 15:15:38
【问题描述】:

我正在努力路由到不同文件夹中的页面。如果页面像这样在同一个文件夹中,它工作正常

(Url.Page("EditContact", new { area = "Admin", id="id" })

但是,如果我将“EditContact”页面移动到不同的区域“帐户”,它会尝试匹配 home/index

https://localhost:/Account/Home/Index/_id_?page=%2FAccount%2FEditContact

但是,我希望它路由到

https://localhost:/Account/EditContact?id=2

似乎正在匹配默认路由,但不确定如何覆盖它以使其正常工作,非常感谢任何帮助。

【问题讨论】:

  • 将页面移入帐户区域文件夹后是否修改Url.Page的区域参数?根据您的描述,我在我这边创建了一个测试演示,效果很好。我建议您可以发布有关如何检查 url.page 生成 url 和有关您的项目的详细信息文件夹构成的更多详细信息。

标签: asp.net asp.net-core .net-core razor-pages


【解决方案1】:

在为您的页面生成路由链接时,您必须尝试按照您在项目中排列页面的方式。我将使用以下示例进行说明:

假设我们有三个页面:Index.cshtml、Todo.cshtml 和 Register.cshtml。让第一页和第二页位于“Pages”文件夹中,第三页位于项目的 Identity 区域中。安排如下图:

页面 -> Index.cshtml

页面 -> Todo.cshtml

区域 -> 身份 -> 页面 -> 帐户 -> Register.cshtml

如果我想从我的索引页面生成一个到 Todo 页面的链接,代码是:

Url.Page("./Todo.cshtml");

因为两个页面在同一个Pages目录下,而生成Register页面的链接,代码为:

Url.Page("/Account/Register", new { area = "Identity" });

生成的链接将是:“/Todo”和“/Identity/Account/Register”。 如果你想添加scheme,那么你可以写代码:

Url.Page("/Account/Register", null, new { area = "Identity" }, 
Request.Scheme);

这将导致:“https://localhost:/Identity/Account/Register”。如果项目发布得当,localhost: 将替换为您的域名。

【讨论】:

    猜你喜欢
    • 2021-09-04
    • 2021-09-04
    • 1970-01-01
    • 2021-10-02
    • 2023-03-24
    • 2020-01-01
    • 2018-10-16
    • 2019-05-22
    • 1970-01-01
    相关资源
    最近更新 更多