在 ASP.NET Core 3.1 中删除环境路由值后,如何在 ASP.NET Core 8 中的链接生成中使用环境路由值

问题描述 投票:0回答:1

使用 ASP.NET Core 8 Razor 页面,我希望能够生成一个指向需要自定义路由参数的页面的链接,而无需每次都手动提供它们。

下面是一个例子,

IPageContextAccessor
访问当前页面的路由值,然后我必须手动将它们添加到出站路由中。

# Link page
@page "/org/{org}/projects/{project}"
@inject IPageContextAccessor Context
@model Details

<a asp-page="/Translate/Index" asp-route-org="@Context.Organisation.Name" asp-route-project="@Context.Project.Name">
    Translate
</a>
# Target Page
@page "/org/{org}/projects/{project}/translate"
...

以前,在 ASP.NET Core 3.1 中,可以在链接生成中使用“环境”路由值,从而减少样板代码:

@page "/org/{org}/projects/{project}"
@model Details

<a asp-page="/Translate/Index">
    Translate
</a>

此功能已根据 https://learn.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio#changes-to-link- 删除一代

我是否必须使用自定义

UrlHelper
TagHelper
以某种方式重建此功能,或者是否有某种机制可以重现它?

asp.net-core routes razor-pages
1个回答
0
投票

您可以使用自定义 UrlHelper,如下所示:

public static class UrlHelperExtensions
{
    public static string LinkWithAmbientValues(this IUrlHelper urlHelper, string pageName, object routeValues = null)
    {
        var currentRouteValues = urlHelper.ActionContext.RouteData.Values;
        var newRouteValues = new RouteValueDictionary(routeValues);

        foreach (var item in currentRouteValues)
        {
            if (!newRouteValues.ContainsKey(item.Key))
            {
                newRouteValues.Add(item.Key, item.Value);
            }
        }

        return urlHelper.Page(pageName, newRouteValues);
    }
}

然后将其应用到您的链接页面中:

<a href="@Url.LinkWithAmbientValues("/Translate/Index")">Translate</a>
© www.soinside.com 2019 - 2024. All rights reserved.