【问题标题】:Cannot implicitly convert type 'List<System.Web.Mvc.SelectListItem> to 'IEnumerable<Microsoft.AspNetCore.Mvc.Rendering.SelectListItem>'无法将类型“List<System.Web.Mvc.SelectListItem>”隐式转换为“IEnumerable<Microsoft.AspNetCore.Mvc.Rendering.SelectListItem>”
【发布时间】:2019-11-12 10:59:14
【问题描述】:

在我的 cshtml 视图中,我有这个预制(脚手架)代码,我对其进行了一些更改,以便能够将枚举列表而不是文本框放在那里:

 <div class="form-group">
                <label asp-for="Color" class="control-label"></label>
                <select asp-for="Color" asp-items="Model.Colors" class="form-control"></select> 
                <span asp-validation-for="Color" class="text-danger"></span>
  </div>

Model.Colors 发生错误。

在我的模型中,我尝试这样做:Colors.Add(new List&lt;SelectListItem&gt;());,正如Cannot implicitly convert type 'System.Web.Mvc.SelectList' to 'System.Collections.Generic.ICollection<System.Web.Mvc.SelectList>' 中所说的那样,但我会得到一个不同的错误; 无法将“System.Collections.Generic.List”隐式转换为“System.Web.Mvc.SelectListItem”

即使ColorsList&lt;SelectListItem&gt;

但在此之前,我在 ViewModel 中有这个:

public EnumsDTO.Color Color { get; set; }
public List<SelectListItem> Colors { get; set; }
public void AddColorViewModel()
{
    Colors = new List<SelectListItem>();
    foreach (Color c in (Color[])Enum.GetValues(typeof(Color)))
    {
        Colors.Add(new SelectListItem
        {
            Value = ((int)c).ToString(),
            Text = c.ToString()
        });
    }
}

我正在尝试学习本教程:https://www.youtube.com/watch?v=MPJ9PPCWxoI

【问题讨论】:

  • 请提供一个可复现的例子,这段代码不是很清楚,因此很难看出到底是什么问题。
  • 文件顶部的using明显错误
  • @KieranDevlin 我一直在关注本教程,但是显示所有代码有点过多,因为它们与此无关。但是,当教程中的人尝试使用asp-items = Model.etc 将 de 方法获取到 cshtml 文件时,它基本上会出错
  • @Selvin 我应该拥有什么using

标签: c# model-view-controller enums asp.net-core-mvc selectlistitem


【解决方案1】:

您最有可能在文件顶部的模型中使用using System.Web.Mvc 命名空间。虽然SelectListItem 存在于那里,但视图中的预期来自Microsoft.AspNetCore.Mvc.Rendering 命名空间。

因此,有两种方法可以解决该问题:

选项 1

  1. 摆脱using System.Web.Mvc;
  2. 添加using Microsoft.AspNetCore.Mvc.Rendering;

选项 2

  1. 将模型中出现的SelectListItem 更改为Microsoft.AspNetCore.Mvc.Rendering.SelectListItem

【讨论】:

    【解决方案2】:

    你应该先安装:

    Install-Package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation -Version x.x.x
    

    根据您的项目或类库版本的依赖关系从 NuGet 以及更改之后:

    using System.Web.Mvc;
    

    using Microsoft.AspNetCore.Mvc.Rendering;
    

    SelectListItem的每次使用中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      相关资源
      最近更新 更多