MVC 3:在 ActionLink 上附加获取参数

发布于 2024-11-28 19:42:27 字数 474 浏览 0 评论 0原文

我正在使用 MVCContrib 网格输出一些数据。当我对列进行排序时,我得到一个可能如下所示的网址:

/?Column=ColumnName&Direction=Ascending

假设我想添加链接来控制显示的结果数量。我会自发地写出这样的内容:

Html.ActionLink("View 10", "Index", new { pageSize = 10 })

...这会给我:

/?PageSize=10

但是假设我已经对网格进行了排序。在这种情况下,我想保存 url 参数,使新的 url 看起来像这样:

/?Column=ColumnName&Direction=Ascending&PageSize=10

如何完成此操作?

I'm using the MVCContrib grid to output some data. When I sort a column, I get a url which may look like this:

/?Column=ColumnName&Direction=Ascending

Lets say I want to add links to control how many results are being shown. Spontaneously I would write something like this:

Html.ActionLink("View 10", "Index", new { pageSize = 10 })

... which would give me:

/?PageSize=10

But say I already sorted the grid. In that case I want to save the url parameters, making the new url look something like this:

/?Column=ColumnName&Direction=Ascending&PageSize=10

How can accomplish this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

下雨或天晴 2024-12-05 19:42:27

您可以在生成链接时包含这些其他参数:

Html.ActionLink(
    "View 10", 
    "Index", 
    new {
        Column = Request["Column"],
        Direction = Request["Direction"],
        pageSize = 10 
    }
)

或者编写一个自定义 html 帮助程序,它将自动包含所有当前查询字符串参数并附加 pageSize 参数:

Html.PaginateLink("View 10", 10)

该帮助程序如下所示:

public static class HtmlExtensions
{
    public static MvcHtmlString PaginateLink(
        this HtmlHelper helper, 
        string linkText, 
        int pageSize
    )
    {
        var query = helper.ViewContext.HttpContext.Request.QueryString;
        var values = query.AllKeys.ToDictionary(key => key, key => (object)query[key]);
        values["pageSize"] = pageSize;
        var routeValues = new RouteValueDictionary(values);
        return helper.ActionLink(linkText, "Index", routeValues);
    }
}

You could include those other parameters when generating the link:

Html.ActionLink(
    "View 10", 
    "Index", 
    new {
        Column = Request["Column"],
        Direction = Request["Direction"],
        pageSize = 10 
    }
)

or write a custom html helper which will automatically include all current query string parameters and append the pageSize parameter:

Html.PaginateLink("View 10", 10)

and here's how the helper could look like:

public static class HtmlExtensions
{
    public static MvcHtmlString PaginateLink(
        this HtmlHelper helper, 
        string linkText, 
        int pageSize
    )
    {
        var query = helper.ViewContext.HttpContext.Request.QueryString;
        var values = query.AllKeys.ToDictionary(key => key, key => (object)query[key]);
        values["pageSize"] = pageSize;
        var routeValues = new RouteValueDictionary(values);
        return helper.ActionLink(linkText, "Index", routeValues);
    }
}
为人所爱 2024-12-05 19:42:27

您还可以使用问题 ASP.NET MVC:通过所有 ActionLink 传播查询参数的正确方法。它将允许您保留您喜欢的任何路线上的任何参数。

You can also use solution from question ASP.NET MVC: The right way to propagate query parameter through all ActionLinks. It will allow you to preserve any parameters on any routes you like.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文