MVC viewModel 和分页结果

MVC viewModel and paged results

我需要按照以下方式将视图模型传递给控制器​​。

[HttpPost]
public JsonResult GetSearchResultsJson(SearchCriteria searchCriteria) 
{
}

SearchCriteria 定义为:

public class SearchCriteria
{
    public SearchData searchData { get; set; }
    public SearchMode searchMode { get; set; }
}

搜索模式为:

public class Searchmode
{
    public int? mode { get; set; }
    public int? pageNumber { get; set; }
    public int? pageSize { get; set; }
}

SearchData 有 61 个属性,用于定义要搜索的项目。

public class SearchData
{
  public string name {get;set;}
  ....
  public int age {get;set;}
}

我使用 jQuery 填充对象并将其传递给控制器​​。 .Net 将此对象转换为 SearchCriteria 类型的对象。一切正常,但是当呈现 PagedListPager 控件时,我如何模拟用于创建对象的 jQuery?

目前我有以下代码:

@Html.PagedListPager(Model.DocumentsPaged, pageNumber => Url.Action("GetSearchResultsJson", XXXXXXXXXXXXXXXXXXXXXXX),pLRO)

并且不知道在标记为 XXXXXXXXXXXXXXXXXXXXXXX 的位中放入什么。

在 jQuery 内,我可以修改 SerachMode 对象的 pageNumber 属性,这确实为我提供了正确的页面,但我需要的正是这个 属性在 Html.PagedListPager 助手中更新。

如示例中所述here您可以通过该页面。

我强烈建议您克隆示例代码并试用一下。 可能您还必须添加搜索参数,以防在服务器端丢失它们。

您的方法 GetSearchResultsJson(SearchCriteria searchCriteria) 被标记为 [HttpPost],因此您可以将 URL 参数留空而只使用 Url.Action("GetSearchResultsJson")。 POST 的搜索参数位于请求正文中,而不是 URL。

因为 Html.PagedListPager 方法需要一个 'page' 参数(假设您使用的是 PagedList.Mvc NuGet 包中的方法),您可能希望这样编写搜索函数:

GetSearchResultsJson(int page, int SearchCriteria searchCriteria)