所有路由的锚标记助手 - 一种更好的方法
Anchor Tag Helper for All Routes - a better way
我的页面参数太多,无法使用 asp-route-param。但我似乎无法找到一种简单的方法来保留任何现有参数,除了我想为特定 link 更改的参数(想想一个包含各种 link 的页面,钻取 down/up 过滤选项)。
我想出了一个可行的方法,但我想知道是否有更好的方法我还没有找到。
我的方法是获取完整的 URL:
var url = GetDisplayUrl()
然后是一个接受 url 的方法以及您要更改的内容:
public static string GenerateBetterUrl(string url, string queryParam, string paramValue)
{
var uriBuilder = new UriBuilder(url);
var query = HttpUtility.ParseQueryString(uriBuilder.Query);
query[queryParam] = paramValue;
uriBuilder.Query = query.ToString();
return uriBuilder.ToString();
}
我有一个不同的版本,它接受用于多重替换(例如日期)的字典。
我错过了什么吗?这似乎是一项正常的任务并且已经融入其中。或者就是这样?
The asp-all-route-data attribute supports the creation of a dictionary of key-value pairs. The key is the parameter name, and the value is the parameter value.
您可以构建并提供整个字典,而不是一个一个地提供路由参数。
此外,您还可以获得用于解析当前路由的所有值的字典。
@{
var ambientValues = HttpContext.Features.Get<IRouteValuesFeature>()?.RouteValues;
}
<a asp-page="..." asp-all-route-data="ambientValues" asp-route-oneValue="something">Link</a>
只需确保将“asp-all-route-data”放在首位即可。
我的页面参数太多,无法使用 asp-route-param。但我似乎无法找到一种简单的方法来保留任何现有参数,除了我想为特定 link 更改的参数(想想一个包含各种 link 的页面,钻取 down/up 过滤选项)。
我想出了一个可行的方法,但我想知道是否有更好的方法我还没有找到。
我的方法是获取完整的 URL:
var url = GetDisplayUrl()
然后是一个接受 url 的方法以及您要更改的内容:
public static string GenerateBetterUrl(string url, string queryParam, string paramValue)
{
var uriBuilder = new UriBuilder(url);
var query = HttpUtility.ParseQueryString(uriBuilder.Query);
query[queryParam] = paramValue;
uriBuilder.Query = query.ToString();
return uriBuilder.ToString();
}
我有一个不同的版本,它接受用于多重替换(例如日期)的字典。
我错过了什么吗?这似乎是一项正常的任务并且已经融入其中。或者就是这样?
The asp-all-route-data attribute supports the creation of a dictionary of key-value pairs. The key is the parameter name, and the value is the parameter value.
您可以构建并提供整个字典,而不是一个一个地提供路由参数。
此外,您还可以获得用于解析当前路由的所有值的字典。
@{
var ambientValues = HttpContext.Features.Get<IRouteValuesFeature>()?.RouteValues;
}
<a asp-page="..." asp-all-route-data="ambientValues" asp-route-oneValue="something">Link</a>
只需确保将“asp-all-route-data”放在首位即可。