0

尝试加载视图时收到此错误消息:

The model item passed into the dictionary is of type
'System.Data.Entity.Infrastructure.DbQuery`1[<>f__AnonymousType0`2[System.Int32,System.String]]',
but this dictionary requires a model item of type
'System.Collections.Generic.IEnumerable`1[HelloWorld.Models.P]'.

可能是因为没有将正确的类型从控制器传递给视图吗?

这是模型:

public class P
{
    [Key]
    public virtual int ImportID { set; get; }
    public virtual string MicroName { set; get; }
}

这是 DBContext 定义:

public DbSet<P> Ps { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
  //REMAPPING TABLE NAMES 
  modelBuilder.Entity<P>()
.ToTable("SomeTable_With_Really_LongName_tbl");

base.OnModelCreating(modelBuilder);
}

这是控制器动作:

public ActionResult ListP()
{

var model = (from p in _db.Ps
 select new
 {
p.ImportID,
 p.MicroName
 }).Take(10);

return View(model);
}

这是视图:

@model IEnumerable<HelloWorld.Models.P>

@{
    ViewBag.Title = "List P";
}

<h2>List P</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            ImportID
        </th>
        <th>
            MicroName
        </th>
        <th></th>
    </tr>

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

</table>

有任何想法吗?

4

2 回答 2

1

认为

var model = (from p in _db.Ps
 select new
 {
p.ImportID,
 p.MicroName
 }).Take(10);

正在返回应该返回 P 的枚举器的 Import ID 和 Name

var model = _db.Ps.OrderBy(f => f.[FieldName]).Take(10);
于 2012-06-08T03:47:31.237 回答
0

您收到此异常是因为 View 需要一个 type 的模型IEnumerable<HelloWorld.Models.P>,但您正在向它传递一个模型,该模型是 Anonymous Type 的集合。

在控制器中试试这个:

public ActionResult ListP()
{
    var model = (from p in _db.Ps
                select p).Take(10);

    return View(model);
}

或者

public ActionResult ListP()
{
    var model = (from p in _db.Ps
                select new P
                {
                    ImportID = p.ImportID,
                    MicroName = p.MicroName
                }).Take(10);

    return View(model);
}
于 2012-06-08T15:37:37.453 回答