MVC:Dictionary需要一个类型为’System.Collections.Generic.IEnumerable`1的模型项

我收到此错误,我不确定我是否能够这样做,这是我的代码..

应用控制器

public ActionResult AppView() { List apps; using (ISiteDbContext context = _resolver.GetService()) { apps = context.Applications.ToList(); } return PartialView("AppView", apps.OrderBy(a => a.Name).ToList()); } 

渲染部分 – 这是在家庭控制器中的视图内。

 @{Html.RenderPartial("~/Views/Application/AppView.cshtml", new Example.Services.DAL.Application());} 

和我的应用程序视图

 @model IEnumerable @{ ViewBag.Title = "Applications"; } 

Applications

@Html.ActionLink("Add New Application", "Create")

@foreach (var item in Model) { }
@Html.DisplayNameFor(model => model.Name)
@Html.DisplayFor(modelItem => item.Name) @Html.ActionLink("Edit", "Edit", new { id = item.ID }) | @Html.ActionLink("Details", "Details", new { id = item.ID }) | @Html.ActionLink("Delete", "Delete", new { id = item.ID })

完整的错误消息:

传递到字典中的模型项的类型为“Example.Services.DAL.Application”,但此字典需要类型为“System.Collections.Generic.IEnumerable`1 [Example.Services.DAL.Application]”的模型项。

由于错误声明您传递的是错误的类型。 更改

 @{Html.RenderPartial("~/Views/Application/AppView.cshtml", new Example.Services.DAL.Application());} 

至:

 @{Html.RenderPartial("~/Views/Application/AppView.cshtml", new List { new Example.Services.DAL.Application() });} 

您的AppView.cshtml绑定到强类型的@model IEnumerable并在调用此视图时传递@{Html.RenderPartial("~/Views/Application/AppView.cshtml", new Example.Services.DAL.Application());}

它应该是列表对象。 您必须传递Example.Services.DAL.Application() list

改变你的

 @{Html.RenderPartial("~/Views/Application/AppView.cshtml", new Example.Services.DAL.Application());} 

 @{Html.RenderPartial("~/Views/Application/AppView.cshtml", new List { new Example.Services.DAL.Application() });} 

您的代码正在查找Ienumerable,因为您传递给局部视图的内容必须与视图中的内容相同,因此请尝试将应用程序视图的第一行更改为

 @model Example.Services.DAL.Application 

它对我有用,希望它对你也很有用:D

为了在(自定义)对象的集合上使用排序,您需要一种对其进行排序的方法。 通常,这是通过inheritance“IComparable”接口来完成的。 在Object类中,您需要一个方法“Compare”来确定比较对象实例进行排序的方法(我在项目中使用“Date”)。

回顾一下:

您在应用程序控制器中使用它:

返回PartialView(“AppView”,apps.OrderBy(a => a.Name).ToList());

但是为了实际排序(或者在这种情况下是OrderBy),您需要在“Application”类中使用一个方法来比较列表中的实例以对它们进行排序。 这是使用“比较”方法完成的:

int Compare(Object x,Object y)

你如何比较完全取决于你。 结果却是:

  • 小于零: 对象x <对象y
  • 零: 对象x =对象y
  • 大于零: 对象x>对象y

我希望这有帮助。 祝好运!

亲爱的,Björn