英文:
The model item passed into the ViewDataDictionary EF but this ViewDataDictionary instance requires 'System.Collections.Generic.List
问题
要将我的ASP.NET MVC Web应用与数据库连接,使用Entity Framework Core(v5.17)。但在尝试最终使它工作时,它显示了以下消息:
> InvalidOperationException: 传递到ViewDataDictionary的模型项的类型为'Microsoft.EntityFrameworkCore.Internal.InternalDbSet1[test_deploiement.Models.PublisherModel]',但此ViewDataDictionary实例需要类型为'System.Collections.Generic.List1[test_deploiement.Models.PublisherModel]'的模型项。
模型类:
public class PublisherModel
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    public PublisherModel(int id, string name)
    {
        Id = id;
        Name = name;
    }
}
控制器:
public class HomeController : Controller
{
    private readonly ApplicationDbContext _db;
    public IEnumerable<PublisherModel> Publishers { get; set; }
    public HomeController(ApplicationDbContext db)
    {
        _db = db;
    }
    public IActionResult adminpublishermanagement()
    {
        Publishers = _db.Publisher_master_tbl;
        return View(Publishers);
    }
}
视图:
<tbody>
@foreach (var Publishers in Model)
{
   <tr>
      <td scope="row">@Html.DisplayFor(modelItem => Publishers.Id)</td> 
      <td>@Html.DisplayFor(modelItem => Publishers.Name)</td>
  </tr>
}
</tbody>
我尝试查看我的类的名称是否有问题,但我不确定。
英文:
I want to connect my ASP.NET MVC web app with the database using Entity Framework Core (v5.17).
But when trying to make it work finally it show me this message :
> InvalidOperationException: The model item passed into the ViewDataDictionary is of type 'Microsoft.EntityFrameworkCore.Internal.InternalDbSet1[test_deploiement.Models.PublisherModel]', but this ViewDataDictionary instance requires a model item of type 'System.Collections.Generic.List1[test_deploiement.Models.PublisherModel]'.
Model class:
public class PublisherModel
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    public PublisherModel(int id, string name)
    {
        Id = id;
        Name = name;
    }
}
Controller
public class HomeController : Controller
{
    private readonly ApplicationDbContext _db;
    public IEnumerable<PublisherModel> Publishers { get; set; }
    public HomeController(ApplicationDbContext db)
    {
        _db = db;
    }
    public IActionResult adminpublishermanagement()
    {
        //List<PublisherModel> publisher = new List<PublisherModel>();
        //publisher.Add(new PublisherModel(101, " Lafond"));
        //publisher.Add(new PublisherModel(102, " Casio"));
        //publisher.Add(new PublisherModel(103, "J'aime lire"));
        //publisher.Add(new PublisherModel(104, "Time ofpost"));
        //publisher.Add(new PublisherModel(105, "Le quotidien"));
        Publishers = _db.Publisher_master_tbl;
        return View(Publishers);
    }
}
View
<tbody>
@foreach (var Publishers in Model)
{
   <tr>
      <td scope="row">@Html.DisplayFor(modelItem => Publishers.Id)</td> 
      <td>@Html.DisplayFor(modelItem => Publishers.Name)</td>
  </tr>
}
</tbody>
I tried to look if the name of my classes were disfunctional but I'm not sure of it.
答案1
得分: 1
你应该在将它传递给视图之前在 DbSet 上调用 .ToList():
Publishers = _db.Publisher_master_tbl.ToList();
英文:
You should call .ToList() on the DbSet before passing it to your view:
Publishers = _db.Publisher_master_tbl.ToList();
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论