【问题标题】:Define a route with root-value and slug in Razor Pages在 Razor Pages 中定义具有根值和 slug 的路由
【发布时间】:2022-12-05 23:28:50
【问题描述】:

我想创建一个具有根值和 slug 值的链接。是这样的:

http://localhost:5001/Page/rootValue?slug=1

我怎样才能做到这一点?

我写的标签如下:

<a asp-page="./ProductCategory" asp-route-id="@category.Slug" asp-route-page="1">@category.Name</a>

我希望获得以下输出:

http://localhost:5001/productCategory/cars?page=1

但在实践中,不会收到 slug 值。

我做的其他事情是在目标页面中获取 id 根值:

@page {id}

在目标页面模型中,获取 URL 值:

OnGet(string id, int page)

但是当我运行该程序时,slug 值(页面)为零并且页面未加载。

我是否必须在 StartUp.cs 文件中为路由输入一些内容?就像 MVC 模型中的 MapRoute 方法一样,Razor Pages 是否有类似的方法?

【问题讨论】:

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


    【解决方案1】:

    在 Razor Pages 中,您可以使用标记上的 asp-route- 属性来指定路由值。例如,如果要在 URL 中包含 id 和页面路由值,则可以使用以下标记:

    <a asp-page="./ProductCategory" asp-route-id="@category.Slug" asp-route-page="1">@category.Name</a>
    

    这将生成如下 URL:

    http://localhost:5001/productCategory/cars?page=1
    

    要检索目标页面中的路由值,您可以在 Razor 标记中使用 @page 指令来访问路由值。例如:

    @page "{id}/{page}"
    
    @functions {
        public string Id { get; set; }
        public int Page { get; set; }
    
        public void OnGet(string id, int page)
        {
            Id = id;
            Page = page;
        }
    }
    

    这将定义一个具有两个路由值的页面:id 和 page。然后,您可以在 OnGet 方法中访问这些值,并在您的页面逻辑中使用它们。

    如果要为页面自定义路由模板,可以在 Startup 类的 ConfigureServices 方法中执行此操作。您可以使用 options.Conventions.AddPageRoute 方法为页面指定自定义路由模板,如下所示:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages()
            .AddRazorPagesOptions(options =>
            {
                options.Conventions.AddPageRoute("/ProductCategory", "{id}/{page}");
            });
    }
    

    【讨论】:

    • 不幸的是,MapRazorPages 方法不接受任何参数!如果没有这些参数,页面的值将不会被读取!我应该怎么办?
    • 更新了答案在此修改后的代码中,不带参数调用 MapRazorPages 用于设置默认页面和路由模板。对 MapRazorPages 的第二次调用用于指定应使用的默认页面和路由模板。这允许代码读取页面参数的值并按预期​​使用它。
    • 我尝试了很多,但是 MapRazorPages 方法不接受输入参数,如果我们尝试提供输入参数,就会给我们一个错误。我使用 .net 版本 5。
    • 你知道我怎样才能用 options.Conventions.AddPageRoute 方法解决这个问题吗?
    • 修改我的答案以使用 addpageroute,让我知道
    猜你喜欢
    • 2020-05-21
    • 2018-12-05
    • 2021-09-19
    • 2022-07-14
    • 2019-07-02
    • 2020-03-24
    • 2018-07-18
    • 2019-01-29
    • 2018-02-17
    相关资源
    最近更新 更多