尝试在asp.net mvc 3 app中显示视图时出错?

时间:2011-10-02 03:49:04

标签: linq asp.net-mvc-3 c#-4.0

我正在尝试在视图中显示列表,如何解决此错误?

  

传递到字典中的模型项是类型的   'System.Data.Objects.ObjectQuery 1[System.Linq.IGrouping 2 [System.Int32,mvc3Post.Models.Contact]]',   但是这个字典需要一个类型的模型项   'System.Collections.Generic.IEnumerable`1 [mvc3Post.Models.Contact]'。

控制器:

    public ActionResult Index()
    {
        AdventureWorksEntities db = new AdventureWorksEntities();

        var result = from soh in db.SalesOrderHeaders
                     join co in db.Contacts
                     on soh.ContactID equals co.ContactID
                     orderby co.FirstName
                     group co by co.ContactID into g
                     select g;
        return View(result.AsEnumerable());
    }

视图:

@model IEnumerable<mvc3Post.Models.Contact>
@{
    ViewBag.Title = "Index";
}
<h2>
    Index</h2>
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            NameStyle
        </th>
        <th>
            Title
        </th>
    </tr>
    @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.NameStyle)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Title)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id = item.ContactID }) |
                @Html.ActionLink("Details", "Details", new { id = item.ContactID }) |
                @Html.ActionLink("Delete", "Delete", new { id = item.ContactID })
            </td>
        </tr>
    }
</table>

1 个答案:

答案 0 :(得分:0)

现在更新我看到了控制器方法:

您可能需要将LINQ结果集转换为列表或其他内容(例如,contacts.ToList())更具体。

另一种选择可能是为页面的列表对象创建一个根对象。如果每个View都有一个代表它整个状态的相应Model类,我发现它更容易理解和维护。

我认为这两种路线都可以解决您的问题。我认为后者可能是更好的方式,如果我不得不推荐一个与另一个。