Asp.net mvc 对PagedList和ViewModel使用附加过滤器
我需要知道如何在使用Asp.net mvc 对PagedList和ViewModel使用附加过滤器,asp.net-mvc,razor,automapper,pagedlist,Asp.net Mvc,Razor,Automapper,Pagedlist,我需要知道如何在使用ToPagedList时将附加属性添加到返回的对象中,以便避免使用ViewBags传递排序顺序参数 我知道,当使用ToPagedList时,它会将IEnumerable转换为IPagedList,我将视图强类型化为PagedList.IPagedList,它允许我获取分页并使用foreach在表中显示结果。然而,似乎没有任何方法可以让我传递额外的值,比如我的排序顺序或过滤器字符串 我正在使用在我的域和ViewModel之间进行映射,这样可以将我的域模型展平为ViewModel
ToPagedList
时将附加属性添加到返回的对象中,以便避免使用ViewBags传递排序顺序参数
我知道,当使用ToPagedList
时,它会将IEnumerable转换为IPagedList,我将视图强类型化为PagedList.IPagedList
,它允许我获取分页并使用foreach
在表中显示结果。然而,似乎没有任何方法可以让我传递额外的值,比如我的排序顺序或过滤器字符串
我正在使用在我的域和ViewModel之间进行映射,这样可以将我的域模型展平为ViewModel:
Mapper.CreateMap<ToDo, IndexToDoViewModel>()
.ForMember(dest => dest.Priority,
opt => opt.MapFrom(src => src.Priority.PriorityName))
.ForMember(dest => dest.Staff,
opt => opt.MapFrom(src => src.Staff.StaffName));
要显示我的待办事项列表,请使用
@foreach (var item in Model) { ....
反复浏览
正如我所说的,问题是我还希望在我的ViewModel中具有诸如排序器
、搜索过滤器
和IncludeCompleted
之类的属性,因为目前它们在ViewBags中传递,我想清理一下
@Html.ActionLink("Name", "Index", new {sortOrder=ViewBag.NameSortParam,
includeComplete = ViewBag.IncludeCompleted})
但因为它们不是ToDo实体的一部分,它们真的属于ToPagedList扩展,我被卡住了。理想情况下,我希望以某种方式将它们与作为PagedList公开的其他属性一起传递,如PageCount
或PageNumber
,但除了派生我自己的PagedList或分叉原始页外,我不知道如何支持传递此类属性。github页面上的所有示例都大量使用了ViewBag
我无法在我的IndexToDoViewModel
周围添加包装器类,因此它有一个IEnumerable或IPagedList以及排序属性,因为这会使我的自动映射无效
我是否坚持使用ViewBags作为Sortor过滤器,或者是否有办法通过获取ViewModel中包含的属性、使用AutoMapper并保持视图的强类型化来获取我的蛋糕并吃掉它
@Html.PagedListPager(@Model, page => Url.Action("Index", new { page = page}))
@foreach (var item in Model) { ....
@Html.ActionLink("Name", "Index", new {sortOrder=ViewBag.NameSortParam,
includeComplete = ViewBag.IncludeCompleted})