将List转换为IEnumberable时出错

时间:2017-12-04 17:01:55

标签: asp.net-mvc-4

我正在尝试显示模型的默认索引页面。但我得到以下错误。

  

传递到字典中的模型项是类型的   'System.Collections.Generic.List 1 [System.Boolean]',但是这个   字典需要类型的模型项   'System.Collections.Generic.IEnumerable`1 [EDIWebsite.Models.Error_Details]'。

控制器

 public ActionResult FindRelatedBols(string bolnumber)
        {
            if (bolnumber == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            var error_Summaries = db.Error_Details.Select(r => r.BOL == bolnumber);
            if (error_Summaries == null)
            {
                return HttpNotFound();
            }
            return PartialView("~/Views/Error_Details/Index.cshtml",error_Summaries.ToList());
        }

查看

@model IEnumerable<EDIWebsite.Models.Error_Details>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Source_System)
        </th>
.
.
.
            @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
        </td>
    </tr>
}

</table>

1 个答案:

答案 0 :(得分:0)

错误是不言自明的。您的视图是对Error_Details个对象的集合强类型的。您当前的代码生成IQueryable<bool>作为error_Summaries变量的类型,您稍后在其上调用ToList(),这将生成一个布尔值列表(List<bool>)。

您的观点期待某些内容(IEnumerable<Error_Details>)并且您的操作方法正在传递其他内容(List<bool>),因此会导致该类型不匹配异常!

您需要将Error_Details个对象的集合传递给视图。我假设你想传递一个过滤的项目列表,它与你的bolnumber参数具有相同的BOL值。您可以使用LINQ Where方法进行过滤。

var items =  db.Error_Details.Where(a=>a.BOL == bolnumber).ToList();
return PartialView("~/Views/Error_Details/Index.cshtml",items);

假设BOL类的Error_Details属性属于string类型。