2012-06-08 5 views
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]'. 

Может быть из не передавая правильный тип из контроллера в View?

Вот модель:

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> 

Любые идеи?

ответ

1

считают, что

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

возвращает идентификатор импорта и имя, где он должен быть возвращающая нумератор Р

var model = _db.Ps.OrderBy(f => f.[FieldName]).Take(10); 
+0

ОК; Я попробую, когда вернусь к работе. благодаря! – scv

+0

Michael, Извините, у меня есть «заказ» прямо перед выбором «Новый». Как вы собираетесь заказать заказ? Еще раз спасибо за помощь. – scv

0

Вы получаете это исключение, потому что View ожидает модель типа IEnumerable<HelloWorld.Models.P>, но вы передаете ему модель, представляющую собой коллекцию анонимного типа.

В контроллере попробовать это:

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

Благодаря Дэрил для наконечника я понял, как поместить в порядке: модели вар = (от р в _db.Ps OrderBy p.CreateDate по убыванию выберите р) .Снять (10); – scv

+0

Это было потрясающе! – scv