使用IEnumerable类型将模型传递给视图

本文关键字:视图 模型 IEnumerable 类型 使用 | 更新日期: 2023-09-27 18:24:47

我想从数据库中获取发票项目,但IEnumerable Type 中存在问题

错误
传递到字典中的模型项的类型为"System.Data.Entity.DynamicProxies.IInvoiceHD_19624A0A21E23E6589B4A75F4B214A34A6186F3A2F588A6B9CC2A40272A9BBD",但此字典需要"System.Collections.Generic.IEnumerable'1[ICSNew.Data.IInvoiceHD]"类型的模型项。

我的控制器

public ActionResult GetInvoice(int Id)
{
    Models.InvoiceHDViewModel _invHd = new Models.InvoiceHDViewModel();
    ICSNew.Data.InvoiceHD _invOdr = new Data.InvoiceHD();
    _invOdr = (new ICSNew.Business.ICSNewController.SalesController())
                  .GetInvoiceItemByInvoiceId(Id);
    _invHd.Cash = _invOdr.CashAmount;
    return View(_invOdr);
}

我的视图

@model IEnumerable<ICSNew.Data.InvoiceHD>
@{
    Layout = null;
}
<h2>GetInvoice</h2>
@foreach (var item in Model)
{
    @Html.DisplayFor(modelItem => item.CashAmount)
}

我的存储库

public InvoiceHD GetInvoiceItemByInvoiceId(int InvoiceId)
{
    try
    {
        return context.InvoiceHDs.Where(x => x.InvoiceId == InvoiceId 
            && x.IsActive == true).FirstOrDefault();
    }
    catch (Exception ex)
    {
        return new InvoiceHD();
    }
}

使用IEnumerable类型将模型传递给视图

由于将InvoiceHD的实例传递给视图,因此需要将模型更改为InvoiceHD,并在视图代码中删除foreach块,如下所示

@model ICSNew.Data.InvoiceHD
@{
    Layout = null;
}
<h2>GetInvoice</h2>
@Html.DisplayFor(m => m.CashAmount)

正如错误试图告诉您的那样,您将视图声明为接受对象的集合(IEnumerable<>),但您试图将单个对象实例传递给它。

那行不通。