将viewmodel传递给我的动作时如何使用pagedlistpager

时间:2015-07-22 06:37:29

标签: html asp.net-mvc pagedlist

我的第二个参数'@ Html.PagedListPager'用什么? 如果我在我的控制器中有一个接受像这样的视图模型的动作

    [HttpPost]
    [AllowAnonymous]
    public ActionResult Search(HomePageViewModel viewModel) 
    {
        var pagedList = repository.GetYogaList(viewModel.SearchQuery, viewmodel.Date)
        viewModel.YogaList = pagedList;
        if (Request.IsAjaxRequest())
        {
            return PartialView("_mySpaces", viewModel);
        }

        return View(viewModel);
     }

和包含分页列表html帮助程序的部分页面

这是部分'_mySpaces.html'

@model HomePageViewModel
<div id="yogaSpaceList">

  <div class="pagedList">
    @Html.PagedListPager(Model.YogaSpaces, page => Url.Action("Search", new { Model }), PagedListRenderOptions.MinimalWithItemCountText)
  </div>

  @foreach (var space in Model.YogaSpaces) {
  <div>
    <h4>@space.Overview.Title</h4>
    <div>
      @space.Overview.Summary
    </div>
  </div>
  }
</div>

1 个答案:

答案 0 :(得分:0)

好的,你可以将一个viewmodel传递给一个动作但是之前声明它需要是一个GET方法,所以用HttpGet属性标记你的动作。 MVC框架将查询字符串转换/绑定到您的视图模型。

您的控制器应如下所示:

[HttpGet]
public ActionResult Search(ViewModel viewModel) 
{
    \\ do something useful here and return ActionResult .....
}

您需要向ViewModel添加页面属性,并且方法允许您的.cshtml代码设置页码并将viewmodel作为对象返回。 MVC会将对象转换为动作链接的查询字符串。

Public class ViewModel {

    // other properties and stuff

    public int? Page { get; set; }
    public object ToPagedListParameters(int page)
    {
         this.Page = page;
         return this;
    }
}

然后,只需对.cshtml文件进行小幅调整即可

&#13;
&#13;
<div class="pagedList">
      @Html.PagedListPager(viewModel, page => Url.Action("Search",viewModel.ToPagedListParameters(page))
</div>
&#13;
&#13;
&#13;

注意:我只使用简单的viewModel,并且没有尝试使用包含集合或列表的viewModels。