首页 > 解决方案 > 错误:模型项传入字典不匹配

问题描述

我想制作一个自定义视图模型类,它需要 2 个模型列表或可枚举。当我尝试在视图类中显示时,它给了我以下错误。

传入字典的模型项的类型为“Prototype01.ViewModels.StockViewModel”,但此字典需要类型为“System.Collections.Generic.IList`1[Prototype01.ViewModels.StockViewModel]”的模型项

我尝试制作单独的视图并使用简单的模型在视图中投影。它工作正常,但是当我尝试获取 viewmodel 时,它并没有像我预期的那样工作。

public class StockController : Controller

{

    private ApplicationDbContext _context;

    public StockController()
    {
        _context = new ApplicationDbContext();
    }

    protected override void Dispose(bool disposing)
    {
        _context.Dispose();
    }

    // GET: Stock
    public ActionResult StockIndex()
    {
        var batteries = _context.Batteries.ToList();
        var rims = _context.Rims.ToList();
        var viewmodel = new StockViewModel
        {
            Batteries = batteries,
            Rims = rims
        };

        return View(viewmodel);
    }

}

public class StockViewModel
{
    public IEnumerable<Battery> Batteries { get; set; }
    public IEnumerable<Rim> Rims { get; set; }
}

        @model IEnumerable<Prototype01.ViewModels.StockViewModel>
@{
ViewBag.Title = "StockIndex";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Stock Management</h2>

@if (!Model.Any())
{
<p>We don't have any Batteries yet.</p>
<label class="btn-group">@Html.ActionLink("Add New", "New", "Battery") 
 </label>
 }
 else
 {
<table class="table table-bordered table-hover">
    <thead>
        <tr>
            <th>battery ID</th>
            <th>battery Name</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var bt in Model)
        {
            <tr>
                <td> tying to show batteries here</td>
            </tr>
        }
    </tbody>
</table>
<table class="table table-bordered table-hover">
    <thead>
        <tr>
            <th>Rim ID</th>
            <th>Rim Name</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var rm in Model)
        {
            <tr>
                <td> tying to show Rims here</td>
            </tr>
        }
    </tbody>
  </table>

}

我正在尝试将数据存储在控制器方法中并发送 viewmodel 以仅显示来自数据库表 Batteries 和 Rims 的 2 个具有 Id 和名称的表

另一方面,我得到一个异常传递到字典中的模型项的类型是“Prototype01.ViewModels.StockViewModel”,但是这个字典需要一个类型为“System.Collections.Generic.IEnumerable`1[Prototype01. ViewModels.StockViewModel]'。

标签: c#dictionarytypesienumerable

解决方案


您正在迭代模型,而不是单个枚举器;ViewModel 中的电池和轮辋。

所以换行:

@foreach (var bt in Model)

至:

@foreach (var bt in Model.Batteries)

轮辋也是如此:

@foreach (var rm in Model)

至:

@foreach (var rm in Model.Rims)

也改变:

@model IEnumerable<Prototype01.ViewModels.StockViewModel>

至:

@model Prototype01.ViewModels.StockViewModel

推荐阅读