嗨,我想知道是否有人在我的asp.net mvc3网站中实现pagedlist代码(https://github.com/TroyGoode/PagedList)时遇到的问题。这是我要执行的操作的详细信息:

我用以下详细信息创建了一个Viemodel:

public class ProductViewModelList
{
    public List<Product> ProductBrowse { get; set; }
    public int NumberOfProducts { get; set; }
    public List<Category> CategoryModel { get; set; }
}


然后,一个控制器保存了我想要传递给视图的信息:

public ActionResult List(int categoryid, int? page)
{
    const int defaultPageSize = 20;
    int currentPageIndex = page.HasValue ? page.Value - 1 : 0;
    var categoryModel = db.Category.Include("Product").Single(c => c.CategoryId == categoryid);
    var paginatedmodel = categoryModel.Product.ToPagedList(currentPageIndex, defaultPageSize);
    var viewModel = new ProductViewModelList
    {
        ProductBrowse = paginatedmodel.ToList(),
        NumberOfProducts = categoryModel.Product.Count()
    };
return View(viewModel);


最后,以以下内容开头的视图:

@inherits System.Web.Mvc.WebViewPage<IPagedList<Social.ViewModels.ProductViewModelList>>
@using Social.Helpers;
@using System.Web.Mvc.Html


并以这种方式用pager创建一个foreach:

@foreach (var item in Model)
                {
                    <div class="result">
<div class="info_result"><h2><a>@Html.ActionLink(Html.TruncateText(item.Title, 25), "Details", new { id = item.ProductId })</a></h2><p><a>@Html.ActionLink(Html.TruncateText(item.Description, 180), "Details", new { id = item.ProductId })</a></p<a>@String.Format("{0:dddd, MMMM d, yyyy}", item.CreatedOn)</a></div>

<div class="paginacion">@Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount)</div>


信息:1-即时使用

@inherits System.Web.Mvc.WebViewPage<IPagedList<Social.ViewModels.ProductViewModelList>>


因为我需要将信息从IPagedList和ProductViewModelList传递到视图。

2-如果我通过像<IPagedList<Social.ViewModels.ProductViewModelList>这样的继承,则对于IPagedList属性,我会收到完整的智能感知,但对于Viewmodels NumberofProducts,ProductBrowse,CategoryModel,我只会收到其名称,而不会收到其他属性,例如ProductBrowse.ProductId。

3-我想显示以下类型的URL:
http://www.domain.com/Controller/List?categoryId=2&page=1

4-我不知道我该怎么做才能包括对象值

Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount, ObjectValues for categoryId=2)


抱歉,如果这很糟,我会尽力解释。
提前致谢。

最佳答案

代替:

@inherits System.Web.Mvc.WebViewPage<IPagedList<Social.ViewModels.ProductViewModelList>>


尝试:

@model IPagedList<Social.ViewModels.ProductViewModelList>


另外,您可以使用显示模板来代替在视图中编写foreach循环。所以在您看来:

<div class="result">
    @Html.DisplayForModel()
</div>
<div class="paginacion">
    @Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount)
</div>


~/Views/Home/DisplayTemplates/ProductViewModelList.cshtml内部

@model Social.ViewModels.ProductViewModelList
<div class="info_result">
    <h2>
        @Html.ActionLink(
            Html.TruncateText(Model.Title, 25),
            "Details",
            new { id = Model.ProductId }
        )
    </h2>
    <p>
        @Html.ActionLink(
            Html.TruncateText(Model.Description, 180),
            "Details",
            new { id = item.ProductId }
        )
    </p>
    <!-- I've modified this to use a display template instead of String.Format
    Now you only need to decorate your view model property with the DisplayFormat attribute like this:
    [DisplayFormat(DataFormatString = "{0:dddd, MMMM d, yyyy}")]
    public DateTime? CreatedOn { get; set; }
    -->
    @Html.DisplayFor(x => x.CreatedOn)
</div>

关于c# - 使用Viewmodel传递数据时出现PagedList错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4985032/

10-13 06:54