使用 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>
我是否必须使用自定义
UrlHelper
或 TagHelper
以某种方式重建此功能,或者是否有某种机制可以重现它?
您可以使用自定义 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>