每页加载一个项目[分页]

时间:2015-12-30 07:08:45

标签: c# asp.net-mvc linq asp.net-mvc-3 pagination

我有一个如下所示的视图

enter image description here

这是上面视图的控制器方法

public ActionResult Add_Product()
{       
    var model = new AddNewProduct
    {
        ListProductFields = db.AB_ProductTypeCategoryField.ToList()
    };

    return View(model);
}

这是上面视图的模型类

public class AddNewProduct
{
    public string Product_ID { get; set; }
    public string ProductTypeID { get; set; }
    public string ProductCategoryID { get; set; }
    public string Subsidary_ID { get; set; }

    public IList<AB_ProductTypeCategoryField> ListProductFields { get; set; }
}
public partial class AB_ProductTypeCategoryField
{
    public string Field_Value_EN { get; set; }
    public string Field_Value_AR { get; set; }
}

这是viewpage

@model albaraka.Models.AddNewProduct

@using (Html.BeginForm()) 
{        

        @for (int i = 0; i < Model.ListProductFields.Count; i++)
        { 
          @Html.TextAreaFor(m => m.ListProductFields[i].Field_Value_EN, new { @class = "form-control summernote", @row = 5 })

          @Html.TextAreaFor(m => m.ListProductFields[i].Field_Value_AR, new { @class = "form-control summernote", @row = 5 })
        }

}

现在我想为上面的视图页面添加分页,并且每页限制一个ListProductFields,因为我跟随this Tutorial

所以我将我的代码改为喜欢这个

    public ActionResult Add_Product(int? page)
    {

        var dummyItems = db.AB_ProductTypeCategoryField.Select(x => "Item " + x);
        var pager = new PaginationModel.Pager(dummyItems.Count(), page);


        var model = new AddNewProduct
        {
            Items = dummyItems.Skip((pager.CurrentPage - 1) * pager.PageSize).Take(pager.PageSize).ToList(),
            Pager = pager
        };

        return View(model);

    }

但后来我遇到了运行时错误

  

“AB_ProductTypeCategoryField”类型的值无法转换为字符串。

2 个答案:

答案 0 :(得分:0)

你的观察问题在线下

var dummyItems = db.AB_ProductTypeCategoryField.Select(x => "Item " + x);

因为你试图用字符串连接操作选择对象(&#34;项目&#34; + x),这就是抛出异常的原因,因为AB_ProductTypeCategoryField是一个对象。我认为你根本不需要"Item " + x

您可以将AddNewProdcut操作实施更改为

public ActionResult Add_Product(int? page)
    {
        var pager = new PaginationModel.Pager(dummyItems.Count(), page);

        var model = new AddNewProduct
        {
            ListProductFields = db.AB_ProductTypeCategoryField.Skip((pager.CurrentPage - 1) * pager.PageSize).Take(pager.PageSize).ToList(),
            Pager = pager
        };

        return View(model);

    }

答案 1 :(得分:0)

尝试使用以下代码,因此您无法单独使用Skip方法。所以在它之前使用OrderBy

var dummyItems = db.AB_ProductTypeCategoryField;
            var pager = new PaginationModel.Pager(dummyItems.Count(), page);

            var model = new AddNewProduct
            {
                ListProductFields = dummyItems.OrderBy(i => i.SomeProperty).Skip((pager.CurrentPage - 1) * pager.PageSize).Take(pager.PageSize).ToList(),
                Pager = pager
            };

            return View(model);