如何再次重复同样的ASP.NET MVC行动?
-
21-08-2019 - |
题
我有称为列表的动作,显示了搜索结果。它通过查询字符串参数接收,因为它们是可选的。我的方法签名看起来像这样:
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)) %>
<% } %>
不隶属于 StackOverflow