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

时间:2014-12-09 11:50:33

标签: c# asp.net-mvc model ienumerable partial

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

应用程序控制器

public ActionResult AppView()
{
    List<Application> apps;
    using (ISiteDbContext context = _resolver.GetService<ISiteDbContext>())
    {
        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<Example.Services.DAL.Application>

@{
    ViewBag.Title = "Applications";
}

<h2>Applications</h2>

<p>
    @Html.ActionLink("Add New Application", "Create")
</p>
<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Name)
        </th>
        <th></th>
    </tr>

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

</table>

完整的错误消息:

  

传递到字典中的模型项是类型的   &#39; Example.Services.DAL.Application&#39;,但这个字典需要一个   型号项目   &#39; System.Collections.Generic.IEnumerable`1 [Example.Services.DAL.Application]&#39;

4 个答案:

答案 0 :(得分:3)

由于错误声明您传递的是错误的类型。变化

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

为:

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

答案 1 :(得分:2)

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

它应该是列表对象。您必须通过list

Example.Services.DAL.Application()

更改您的

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

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

答案 2 :(得分:1)

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

@model Example.Services.DAL.Application

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

答案 3 :(得分:0)

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

回顾一下:

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

  

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

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

  

int Compare(Object x,Object y)

你的比较完全取决于你。但结果是:

  • 小于零:对象x&lt;对象y
  • 零:对象x =对象y
  • 大于零:对象x&gt;对象y

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

亲爱的问候, 的Björn