ASP.NET MVC - 创建操作链接保留查询字符串

Sim*_*mon 5 c# asp.net-mvc razor asp.net-core-mvc asp.net-core

我目前正在为 ASP.NET Core MVC 编写自己的分页列表。

我在创建以下内容时遇到了困难:

我想创建一个 UrlHelper 扩展方法: Url.PageLink(int page, int pageSize)

在该扩展方法中,我想返回一个链接,该链接重用控制器、操作、查询字符串的所有当前值,此外它还应该添加/更新查询字符串中的页面、pageSize 值。

问题:从哪里获取 UrlHelper 对象中的当前控制器和操作?重建查询字符串的最佳方法是什么?我可以在这里看到它 url.ActionContext.HttpContext.Request.QueryString...但是我真的需要手动重建它吗?或者是否存在类似 AddQueryStringValue(int key, object value) 的东西?

非常感谢!西蒙

Sim*_*mon 1

现在已经这样做了:

public static class UrlHelperExtensions
{
    public static string Page(this IUrlHelper url, int page, int pageSize)
    {
        //Reuse existing route values
        RouteValueDictionary resultRouteValues = new RouteValueDictionary(url.ActionContext.RouteData.Values);

        //Add existing values from query string
        foreach (var queryValue in url.ActionContext.HttpContext.Request.Query)
        {
            if(resultRouteValues.ContainsKey(queryValue.Key))
                continue;

            resultRouteValues.Add(queryValue.Key, queryValue.Value);
        }

        //Set or add values for PagedList input model
        resultRouteValues[nameof(PagedListInputModel.Page)] = page;
        resultRouteValues[nameof(PagedListInputModel.PageSize)] = pageSize;

        return url.RouteUrl(resultRouteValues);
    }
}
Run Code Online (Sandbox Code Playgroud)

并为 pagedlist 值创建了一个单独的输入模型“PagedListInputModel”...这样我可以确保我可以在所有地方重用它,而不必确保 page 和 pageSize 属性包含在所有需要的视图模型中正确的名字。

欢迎任何反馈。