我有称为列表的动作,显示了搜索结果。它通过查询字符串参数接收,因为它们是可选的。我的方法签名看起来像这样:

public ActionResult List(List<int> categoryIDs, string school, int? stateID, int? page)

CategoryIDs是一个多选择框,我所做的一切都在一个GET请求。我需要做的是建立在我看来,到下一个页面的链接,但保留相同的搜索参数。我知道我可以建立手工链接,但也可以使用任何的内置的路由选择方法,特别是当categoryIDs有像“?的categoryID = 1&的categoryID = 2&的categoryID = 3”被绑定到列表?要格式化

有帮助吗?

解决方案

我觉得没有ActionLink过载,可以帮助你做到这一点的默认。您需要使用您要包括的参数来填充RouteValueDictionary实例。

有关类别的列表中,尝试S / T等categoryIDs=2,3,4,5等由于重复键在RouteValueDictionary是不允许的。在此之后,在操作方法需要将串解析成整数列表。

其他提示

您应该能够做到这一点:

所有的当前值应被默认传递英寸我不得不尝试一下,虽然以确保我引用正确的过载。

我喜欢传递对象作为参数来搜索操作,然后将参数对象传递到视图。因此,在您的控制器像这样的代码(注意:我使用的是罗布科纳的PagedList类):

public class SearchParameters {
    public string School { get; set; }
    public int? StateID { get; set; }
    public int? Page { get; set; }

    public SearchParameters GetPage(int page) {
        return new SearchParameters {
            School = School,
            StateID = StateID,
            Page = page
        };
    }
}

public class SearchViewModel {
    public PagedList<[YourResultType]> Results { get; set; }
    public SearchParameters Parameters { get; set; }
}

// ...

public ActionResult Search(SearchParameters parameters) {
    IQueryable<[YourResultType]> query;
    // ... do some stuff to get your search results

    return View("Search", new SearchViewModel {
        Results = query.ToPagedList(parameters.Page - 1), 15),
        Parameters = parameters
    });
}

所以,你的搜索查看从一般的ViewPage 继承与页面的声明是这样的:

<%@ Page ... Inherits="ViewPage<SearchViewModel>" %>

然后在你的搜索视图中,你可以做这样的事情...

<% for(int i = 0; i < Model.Results.TotalPages; i++) { %>
    <%= Html.ActionLink(i + 1).ToString(), "Search",
        Model.Parameters.GetPage(i + 1)) %>
<% } %>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top