MVC viewModel和分页结果

时间:2017-01-09 12:48:23

标签: c# asp.net-mvc viewmodel pagedlist

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

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

SearchCriteria定义为:

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

SearchMode的位置是:

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助手中更新这个属性。

2 个答案:

答案 0 :(得分:2)

如示例here中所述,您可以传递该页面。

我真的建议您克隆示例代码并使用它进行一些操作。 可能你也必须添加你的搜索参数,以防你在服务器端丢失它们。

答案 1 :(得分:0)

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

因为Html.PagedListPager方法需要'page'参数(假设您使用的是PagedList.Mvc NuGet包中的方法),您可能需要编写搜索函数,如下所示:

GetSearchResultsJson(int page, int SearchCriteria searchCriteria)