首页 > 解决方案 > 转换错误:类型 IList 不能隐式转换为 IEnumerable

问题描述

我的 EF Codefirst 模型是Lib

public class Lib
{
    public int ID { get; set; }

    [Required]
    [PageRemote(PageHandler = "IsKeyExists", HttpMethod = "Get")]
    public string Key { get; set; }
}

我想要一个comboboxin razor 页面来选择一个 Lib。我的cshtml代码是:

<select asp-for="Lib" asp-items="Model.Libs"></select>

我的 PageModel 代码是:

    public IList<Lib> Libs { get; set; }
    public Lib Lib { get; set; }

然后我得到一个编译器错误

错误CS0266:无法将类型“System.lections.Generic.IList”为“System.Collections.Generic.IEnumerable”。一个显式转换(是否存在集体转换强制?)

英文版(来自谷歌翻译):

错误 CS0266:“System.Collections.Generic.IList”类型无法隐式转换为“System.Collections.Generic.IEnumerable”。有一个明确的转换(是否缺少演员表?)

在 wpf 组合框中有一个名为 的属性DisplayMemberPath,有没有类似的方法?

标签: c#asp.net-corerazor-pages

解决方案


您需要传递兼容的类型。如果您查看docs,您会发现他们使用SelectListItem列表。public IList<Lib> Libs{get;set;}你可以重构public IList<SelectListItem> Libs{get;set;}

另一种方法是将您的列表映射到SelectListItem列表:

@using System.Collections.Generic

<select asp-for="Lib" asp-items="Model.Libs.Select(l=> new SelectListItem{Text=l.Key, Value=l.ID.ToString()})"></select>

推荐阅读