2

我有一个名为 List 的操作,它显示搜索结果。它通过查询字符串接收参数,因为它们是可选的。我的方法签名如下所示:

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

CategoryIDs 是一个多选框,我正在通过 GET 请求执行所有操作。我需要做的是在我的视图中创建一个指向下一页的链接,但保留相同的搜索参数。我知道我可以手动构建链接,但可以使用任何内置路由方法,特别是当 categoryID 必须格式化为“?categoryID=1&categoryID=2&categoryID=3”才能绑定到列表时?

4

3 回答 3

1

我认为默认情况下没有ActionLink重载可以帮助您做到这一点。您需要RouteValueDictionary使用要包含的参数填充实例。

对于类别列表,请尝试 s/t likecategoryIDs=2,3,4,5等,因为RouteValueDictionary. 之后,在action方法中需要将字符串解析成整数列表。

于 2009-02-05T08:43:29.397 回答
0

你应该能够做到这一点:

默认情况下应传入所有当前值。我必须尝试一下,以确保我引用了正确的重载。

于 2009-02-05T04:26:51.210 回答
0

我喜欢将对象作为参数传递给搜索操作,然后将参数对象传递给视图。所以在你的控制器中有一些这样的代码(注意我使用的是Rob Conery 的 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<T> 并具有如下页面声明:

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

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

<% for(int i = 0; i < Model.Results.TotalPages; i++) { %>
    <%= Html.ActionLink(i + 1).ToString(), "Search",
        Model.Parameters.GetPage(i + 1)) %>
<% } %>
于 2009-07-20T01:43:41.467 回答