C# 尝试在视图中使用两个模型。复合模型不包含扩展方法

C# 尝试在视图中使用两个模型。复合模型不包含扩展方法,c#,asp.net-mvc,linq,asp.net-mvc-4,C#,Asp.net Mvc,Linq,Asp.net Mvc 4,我知道关于这个问题有很多话题,但没有一个能回答我的这个具体问题。我有一个MVC项目,我想在一个视图上实现两个模型(单独的表) 我使用链接中经过验证的建议执行以下操作: 这是我的密码: -第一个模型 [Table("Issue_Tracker")] public class Case {... } -第二种模式: [Table("Jobs_Ref_Tbl")] public class Job {... } -复合模型: public class IndexPageModel { p

我知道关于这个问题有很多话题,但没有一个能回答我的这个具体问题。我有一个MVC项目,我想在一个视图上实现两个模型(单独的表)

我使用链接中经过验证的建议执行以下操作:

这是我的密码:

-第一个模型

[Table("Issue_Tracker")]
public class Case
{...
}
-第二种模式:

[Table("Jobs_Ref_Tbl")]
public class Job
{...
}
-复合模型:

public class IndexPageModel
{
    public IEnumerable<Case> Cases { get; set; }
    public IEnumerable<Job> Jobs { get; set; }
}
最后,我在视图中使用它们:

<!DOCTYPE html>
@using PagedList;
@using PagedList.Mvc;
@model IPagedList<ITS.Models.IndexPageModel>
...
<table id="tableBe">
    <tr>
        <th style="border-left:none !important">
            Action Buttons
        </th>
        <th>
            <div style="width: 250px">
                @Html.DisplayNameFor(model => model.Cases.First().Issue)
我希望它是:

var cases = db.Cases.AsQueryable();
[sorts and filters]
var model = new IndexPageModel
                {
                    Jobs = db.Jobs.ToList()
                    Cases = cases
                };
return View(model.ToPagedList(page ?? 1, 10));
但它又回来了

“IndexPageModel”不包含“ToPagedList”的定义


您的控制器正在返回一个
IndexPageModel
,但您的视图需要一个
IPagedList
。更改模型以接受正确的模型:

<!DOCTYPE html>
@using PagedList;
@using PagedList.Mvc;
@model ITS.Models.IndexPageModel // The correct model.

@使用页面列表;
@使用PagedList.Mvc;
@建模ITS.Models.IndexPageModel//正确的模型。
基于
model=>model.Cases.First().Issue
似乎您实际上想要使用从控制器返回的模型(
IndexPageModel


我假设
ToPagedList()
返回一个
IPagedList
。这意味着您实际上只想在
IndexPageModel
中使用
IPagedList
,而不是在实际视图中。因此,基于此,您应该能够在视图中简单地更改模型,并且它将起作用。

在您的foreach中,它应该是@foreach(model.Cases中的var项),为什么要在组合作业+案例模型上调用
ToPagedList
?只有案例才应该被分页,两者都分页没有多大意义。ie更改IndexPageModel,使Cases成为pagedlistIt是旧代码的一部分。最终我想把它作为一个页面列表,但这不是正确的假设。我试图节省空间,因此跳过了应用分页的部分。你是对的。这解决了问题,但现在我有另一个问题:@Html.PagedListPager(Model.Cases…)导致“无法转换”。有没有办法将IndexPageModel作为页面列表传递?好的。你能分享完整的代码吗?因为在共享的代码中,控制器没有返回视图所期望的相同模型,这就是您看到错误的原因。IPagedList不包含名为Cases的属性。在我解决了列数据类型的问题后,结果证明您最终是对的。我所做的唯一重大改变是在PagedListPager HTML助手类中将model转换为IPageList,它正在工作。谢谢!PS:在视图中复制和粘贴一些代码是非常重要的,因为它会刷新对模型的引用。否则它会将其标记为错误并使您感到困惑。
var cases = db.Cases.AsQueryable();
 [sorts and filters]
return View(cases.ToPagedList(page ?? 1, 10));
var cases = db.Cases.AsQueryable();
[sorts and filters]
var model = new IndexPageModel
                {
                    Jobs = db.Jobs.ToList()
                    Cases = cases
                };
return View(model.ToPagedList(page ?? 1, 10));
<!DOCTYPE html>
@using PagedList;
@using PagedList.Mvc;
@model ITS.Models.IndexPageModel // The correct model.