2014-12-09 57 views
4

我得到這個錯誤,我不知道如果我能做到這一點,這裏是我的代碼..MVC:詞典需要類型的模型項目「System.Collections.Generic.IEnumerable`1

應用控制器

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> 

完整的錯誤信息:

傳遞到字典的模型產品的類型 'Example.Services.DAL.Application',但本字典需要 型號項目 'System.Collections.Generic.IEnumerable`1 [Example.Services.DAL.Application]'。

+1

請在你的問題的身體*全*錯誤消息。完整的錯誤信息不會以「but」開頭,但會加入 – 2014-12-09 11:51:58

+1

完整的錯誤信息。 – 2014-12-09 11:54:38

回答

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() });} 
+0

啊謝謝你! :) – 2014-12-09 11:58:07

+0

很好的回答!它可以工作,但是它在呈現局部視圖時會自動向列表中添加新行? – Nurul 2017-09-19 04:50:45

+0

@Nurul不知道如果我100%理解你的問題,但基於問題的AppView.cshtml'應該添加一個新行 - 你傳遞'Application'的集合,並且它列出所有項目(在這個例子中它只是一行)。 – Vladimirs 2017-09-19 10:20:59

2

AppView.cshtml被綁定到強類型的@model IEnumerable<Example.Services.DAL.Application>並同時呼籲這個觀點你逝去的@{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<Example.Services.DAL.Application> { new Example.Services.DAL.Application() });} 
0

爲了使用上的(自定義)對象的集合排序,你需要爲它進行排序的方法。通常,這是通過繼承「IComparable」接口來完成的。在你的Object類中,你需要一個「比較」的方法來確定比較你的對象實例進行排序的方法(我在我的項目中使用「Date」)。

總結一下:

你在你的應用程序控制器使用:

回報PartialView( 「APPVIEW」,apps.OrderBy(A => a.Name).ToList());

但爲了實際排序(或在本例中爲OrderBy),您需要在「Application」類中比較列表中的實例對它們進行排序的方法。

INT比較(對象X,對象Y)

你怎麼比較是完全取決於你:這是用 「比較」 的方法來完成。然而,結果可以是:

  • 小於零:對象x <對象ý
  • 零:對象x =對象ý
  • 大於零:對象x>對象ÿ

我希望這有助於。祝你好運!

尊敬的問候, 比約恩

1

你的代碼是尋找一個IEnumerable使用,因爲你通過你的部分觀點是什麼,必須是相同的東西在你的視圖,以便嘗試您的應用程序視圖的第一行更改爲

@model Example.Services.DAL.Application 

它的工作對我希望它是用好你的還有:d

相關問題