c# - 如何将 View 模型传递给 PagedList

标签 c# asp.net-mvc viewmodel pagedlist

这里是 C# MVC 的完全初学者,需要一些帮助。 我一直坚持将 View 模型数据传递给 PagedList。 我究竟做错了什么? 我收到的 Controller 中的错误消息是:

Cannot implicitly convert type 'PagedList.IPagedList' to 'PagedList.IPagedList'. An explicit conversion exists(are you missing a cast?)

我已经检查了很多关于这个主题的其他帖子,但无法解决我的问题。

这是我的 View 模型:

public partial class NaloziViewModel
{
    public int IDNalozi { get; set; }
    public int KlijentID { get; set; }

    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy HH:mm}", ApplyFormatInEditMode = true)]
    public DateTime VremeStart { get; set; }

    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy HH:mm}", ApplyFormatInEditMode = true)]
    public DateTime? VremeKraj { get; set; }

    public int KilometrazaStart { get; set; }
    public int? KilometrazaKraj { get; set; }
    public virtual Klijent Klijent { get; set; }
    public int? Page { get; set; }
}

分页类

public class Pagedclass
{
    public PagedList.IPagedList<NaloziViewModel> mylist { get; set; }
    public int KilometrazaSum { get; set; }
    public int VremeSum { get; set; }
}

Controller :

public ActionResult Index(int? page, DateTime? dateFrom, DateTime? dateTo, string klijentIme)
{
    int pageSize = 10;
    int pageNumber = (page ?? 1);
    var naloziFilter = db.Nalozis.Include(n => n.Klijent).OrderByDescending(n => n.IDNalozi).Where(n => n.Obrisan == 0).ToPagedList(pageNumber,pageSize);

    if (dateFrom != null && dateTo != null )
    {
        naloziFilter = naloziFilter.Where(n => n.Klijent.NazivKlijenta.Contains(klijentIme)).Where(n => n.VremeStart >= dateFrom).Where(n => n.VremeKraj <= dateTo).ToPagedList(pageNumber,pageSize);
        TimeSpan vremeSum = new TimeSpan();
        naloziFilter.Where(x => x.VremeKraj.HasValue).ToList().ForEach(x => vremeSum += x.VremeKraj.Value - x.VremeStart);

        var model = new Pagedclass
        {
            mylist = naloziFilter,
            KilometrazaSum = naloziFilter.Sum(n => n.KilometrazaKraj ?? 0) - naloziFilter.Sum(n => n.KilometrazaStart),
            VremeSum = (vremeSum.Days*24)+vremeSum.Hours,

        };
        return View(model);
    }
    else
    {
        TimeSpan vremeSum = new TimeSpan();
        naloziFilter.OrderByDescending(n => n.IDNalozi).Where(n => n.Obrisan == 0).Where(x => x.VremeKraj.HasValue).ToList().ForEach(x => vremeSum += x.VremeKraj.Value - x.VremeStart);

        var model = new Pagedclass
        {
            mylist = naloziFilter,
            KilometrazaSum = naloziFilter.Sum(n => n.KilometrazaKraj ?? 0) - naloziFilter.Sum(n => n.KilometrazaStart),
            VremeSum = (vremeSum.Days * 24) + vremeSum.Hours
        };
        return View(model);
    }
}

我的看法:

@model Pagedclass

@using PagedList;

@using PagedList.Mvc;

....

最佳答案

不使用自动映射器的基本版本是更改您的 Linq 以返回所需的对象类型(通过在 select 子句中更新它):

例如改变这个:

naloziFilter.OrderByDescending(n => n.IDNalozi)
      .Where(n => n.Obrisan == 0)
      .Where(x => x.VremeKraj.HasValue).ToList().ForEach(x => vremeSum += x.VremeKraj.Value - x.VremeStart);

像这样:

naloziFilter.OrderByDescending(n => n.IDNalozi)
      .Where(n => n.Obrisan == 0)
      .Where(x => x.VremeKraj.HasValue)
      .Select(x=> new NaloziViewModel(){
          IDNalozi = x.IDNalozi,
          KlijentID = x.KlijentID,
          VremeStart = x.VremeStart,
          VremeKraj = x.VremeKraj,
          KilometrazaStart = x.KilometrazaStart, 
          KilometrazaKraj = x.KilometrazaKraj,
          Klijent = x.Klijent,
          Page = x.Page
       })
      .ToList().ForEach(x => vremeSum += x.VremeKraj.Value - x.VremeStart);

关于c# - 如何将 View 模型传递给 PagedList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26596648/

相关文章:

jquery - MVC 部分 View 模型不刷新

android - 在 View 模型之间传递数据 MvvmCross

c# - 写入文件时 FileStream 与 System.IO.File.WriteAllText

javascript - 无法读取 Angular JS 中未定义的属性成功

c# - Hangfire 自定义状态过期

c# - 在页面 (cshtml) 上包含一个名为 "Html.Action"的部分

.net - MVP/MVVM - 列表过滤,谁负责?

android - MVVMCross 从 MvxBindableListView 获取 SelectedItem

c# - EntityObject 到 DbContext

c# - 为什么这个正则表达式不匹配任何内容?