使用IEnumerable类型将模型传递给View

时间:2014-09-28 15:57:25

标签: c# asp.net asp.net-mvc asp.net-mvc-4

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

中存在问题
  
    

错误
    传递到字典中的模型项的类型为'System.Data.Entity.DynamicProxies.InvoiceHD_19624A0A21E23A6589B4A75F4B214A34A6186F3A2FF588A6B9CC2A40272A9BBD',但是该字典需要类型为'System.Collections.Generic.IEnumerable`1 [ICSNew.Data.InvoiceHD]'的模型项。

  

我的控制器

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();
    }
}

2 个答案:

答案 0 :(得分:2)

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

@model ICSNew.Data.InvoiceHD

@{
    Layout = null;
}

<h2>GetInvoice</h2>

@Html.DisplayFor(m => m.CashAmount)

答案 1 :(得分:1)

当错误试图告诉您时,您将视图声明为收集对象的集合(IEnumerable<>),但您尝试将其传递给单个对象实例。

那不会奏效。