【问题标题】:PagedList a List of objects in a ViewModelPagedList 视图模型中的对象列表
【发布时间】:2020-12-27 09:04:51
【问题描述】:

我安装了 PagedList.MVC Nugget 包,并试图从列表 ListProductsList

中创建一个 PagedList

在我看来:

@model PagedList.IPagedList<MyProject.ViewModel.AddProductsViewModel>
@using PagedList.Mvc;
    
                stuff here

                    <table class="table" align="left" style="padding-left:15px">
                        <tr>
                            
                            <th>
                                Product
                            </th>
                           
                        </tr>
                        @foreach (var item in Model.ProductsList)
                        {
                            <tr>
                                                                     
                                <td>
                                    @Html.DisplayFor(modelItem => item.Descripcion)
                                </td>
                               
                            </tr>
                        }
                    </table>
                    Página: @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) de: @Model.PageCount
                    @Html.PagedListPager(Model, page => Url.Action("Index", new
                    {
                        page,
                        sortOrder =
                        ViewBag.CurrentSort,
                        currentFilter = ViewBag.CurrentFilter
                    }))

我的控制器:

 public ActionResult NewSale(int? page=null)
        {
            page = (page ?? 1);
            var productspl = db.Products
              .Include(p => p.Category)
              .Include(p => p.Color).OrderBy(p => p.Description).ToPagedList((int)page, 8);           
            var saleViewModel = new AddProductsViewModel
            { 
                ProductsList = productospl,
            };
            return View(saleViewModel);
        }

我的 ViewModel:

namespace MyProject.ViewModel
{
    public class AddProductsViewModel
    {
          stuff
        

        public List<Productos> ListaProductos { get; set; }
     }          
}

问题是我无法访问 ProductsList 而不更改它

@model PagedList.IPagedList<MyProject.ViewModel.AddProductsViewModel>

有办法吗?

【问题讨论】:

  • 您应该使用包装视图模型将分页列表作为属性保存,然后将该虚拟机用作视图中的模型。这样你就不会限制自己
  • 你能给我一个代码示例吗?我想我明白了,但无法真正想象它 rn @Alex

标签: c# asp.net .net model-view-controller


【解决方案1】:

试试这样的:

public class ProductsPageViewModel() 
{
    public PagedList.IPagedList<MyProject.ViewModel.AddProductsViewModel> AddProductsPagedList { get; set; }
    // other properties/methods for your view go here...    
}

那么在你看来:

@model ProductsPageViewModel

// other HTML here....

Página: @(Model.AddProductsPagedList.PageCount < Model.AddProductsPagedList.PageNumber ? 0 : Model.AddProductsPagedList.PageNumber) de: @Model.AddProductsPagedList.PageCount
@Html.PagedListPager(Model.AddProductsPagedList, page => Url.Action("Index", new
{
    page,
    sortOrder =
    ViewBag.CurrentSort,
    currentFilter = ViewBag.CurrentFilter
}))

【讨论】:

  • 我确实这样做了,当它到达这里时会抛出一个空异常:视图中的“Página:@(Model.AddProductsPagedList.PageCount”
  • 您的AddProductsPagedList 可能为空。您是否在控制器中正确设置它?调试并单步执行设置它的代码以查看它是否为空
  • 我使用 LINQ 获取变量中的 .ToPagedList 项,以便为 AddProductsViewModel 中的通用列表 赋值,但不知道如何为 AddProductsPagedList 赋值。 (对不起我的英语,我希望我能解释清楚,也许我们可以联系,所以我给你看一些代码)
  • 您是否要添加到同一页面上的列表中?您想在不同的页面上执行此操作,但在此页面上有一个 [添加] 按钮
  • 不客气,@BautistaGonzálezCarpani。很高兴它对你有用
【解决方案2】:

在我的 ViewModel 中:

namespace MyProject.ViewModel
{
    public class AddProductsViewModel
    {
          stuff
        

        public List<Productos> ProductsList { get; set; }
     }          
}

改变了这个:

 public List<Productos> ProductsList { get; set; }

收件人:

 public PagedList.IPagedList<Productos> ProductsList { get; set; }

我要感谢用户 Alex 帮助我得到这个答案并帮助我解决其他问题。

【讨论】:

    猜你喜欢
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    相关资源
    最近更新 更多