【问题标题】:Error: Model Item passed into dictionary missmatch错误:模型项传入字典不匹配
【发布时间】:2019-08-03 16:07:20
【问题描述】:

我想制作一个自定义视图模型类,它需要 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 以仅显示 2 个具有数据库表 Batteries 和 Rims 的 Id 和名称的表

另一方面,我遇到了一个异常 传入字典的模型项的类型为“Prototype01.ViewModels.StockViewModel”,但此字典需要类型为“System.Collections.Generic.IEnumerable`1[Prototype01.ViewModels.StockViewModel]”的模型项。

【问题讨论】:

    标签: c# dictionary types ienumerable


    【解决方案1】:

    您正在迭代模型,而不是单个枚举器; 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
    

    【讨论】:

    • 型号.电池不可用
    • 我的错误介于传递视图模型和在视图中接收它之间。
    • 我尝试调试,当调用返回视图(viewModel)时;它在视图模型对象中显示计数。
    • 您已将您的 ViewModel 声明为 Enumerable,我已更新我的答案
    • 我也试过了,删除了 IEnumerable 但它说找不到 Model.Any()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    • 2011-11-26
    • 2015-02-02
    • 1970-01-01
    相关资源
    最近更新 更多