Asp.net 将SelectListItem添加到SelectList

Asp.net 将SelectListItem添加到SelectList,asp.net,asp.net-mvc,entity-framework,Asp.net,Asp.net Mvc,Entity Framework,我有一个使用实体框架的MVC应用程序。我有两个实体,用户和教员 我正在尝试将教员添加到用户编辑过程中使用的下拉框的选择列表中。我得到了一个错误: “无法将类型'System.Collections.Generic.List'隐式转换为'System.Web.Mvc.SelectList'” 我在谷歌上搜索了一下,找到了一些类似问题的解决方案,但运气不好 EditUserModel using System; using System.Collections.Generic; using Syst

我有一个使用实体框架的MVC应用程序。我有两个实体,用户和教员

我正在尝试将教员添加到用户编辑过程中使用的下拉框的选择列表中。我得到了一个错误:

“无法将类型'System.Collections.Generic.List'隐式转换为'System.Web.Mvc.SelectList'”

我在谷歌上搜索了一下,找到了一些类似问题的解决方案,但运气不好

EditUserModel

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Purely_Servers.Models
{
    public class EditUserModel
    {
        public user User { get; set; }
        public SelectList FacultyList { get; set; }
    }
}
用户控制器

    public ActionResult Edit(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }


        var model = new EditUserModel
        {
            User = db.Users.Find(id),
            FacultyList = (
                from f in db.Faculties
                select new SelectListItem
                {
                    Value = f.id.ToString(),
                    Text = f.name
                }).ToList() /////////////////////ERROR HERE
        };


        if (model == null)
        {
            return HttpNotFound();
        }
        return View(model);
    }
任何帮助都将不胜感激。

试试以下方法:

IEnumerable<SelectListItem> FacultyList { get; set; }
使用
ToList()
时,可枚举项将转换为
列表
,不能转换为
选择列表

您有两种选择:

  • FacultyList
    属性更改为
    List
    类型
  • 将查询转换为
    选择列表
    (请参见下面的代码)
  • 选项2的代码:

    FacultyList = new SelectList(
        from f in db.Faculties
        select new SelectListItem
        {
            Value = f.id.ToString(),
            Text = f.name
        });
    

    这可能对某人有所帮助

            CostCenterHeaders CostHeaders = CostCenterHeaders.GetCostCenterHeaders(ClientNumber);
            List<SelectListItem> Level1Header = new List<SelectListItem>();
            if (CostHeaders.Level1Heading !=null)
            {
                Level1Header.Add(new SelectListItem { Text = "All " + CostHeaders.Level1Heading + " Centers", Value = "" });
                List<HierarchyLevel> HierarchyLevels = HierarchyLevel.GetHierarchyByLevel(ClientNumber);
                Level1Header.AddRange(HierarchyLevels.Select(x => new SelectListItem() { Value = x.LevelID, Text = x.LevelDescr }).ToList());
            }
    
    CostCenterHeaders CostHeaders=CostCenterHeaders.GetCostCenterHeaders(ClientNumber);
    List Level1Header=新列表();
    如果(CostHeaders.Level1Heading!=null)
    {
    Level1Header.Add(新的SelectListItem{Text=“All”+CostHeaders.Level1Heading+“Centers”,Value=”“});
    List HierarchyLevels=HierarchyLevel.GetHierarchyByLevel(ClientNumber);
    Level1Header.AddRange(HierarchyLevels.Select(x=>newselectListItem(){Value=x.LevelID,Text=x.LevelDescr}).ToList());
    }
    
    您的问题是结果是List类型,而您的属性是SelectList类型,请尝试将其设置为FacultyList=new SelectList((…query..).ToList());正如其他人所说,最简单的解决方案是将您的FacultyList的类型从SelectList更改为IEnumerableIt,它总是最好使用
    IEnumerable
    。像
    Html.DropDownListFor
    这样的帮助程序自然而然地处理创建选择列表/在列表中自动选择适当的项目。当使用此解决方案时,我在上述代码的最后一行出现语法错误。它需要一个{……有什么想法吗?或者只是
    FacultyList=newselectlist(db.Faculties,“id”,“name”);
            CostCenterHeaders CostHeaders = CostCenterHeaders.GetCostCenterHeaders(ClientNumber);
            List<SelectListItem> Level1Header = new List<SelectListItem>();
            if (CostHeaders.Level1Heading !=null)
            {
                Level1Header.Add(new SelectListItem { Text = "All " + CostHeaders.Level1Heading + " Centers", Value = "" });
                List<HierarchyLevel> HierarchyLevels = HierarchyLevel.GetHierarchyByLevel(ClientNumber);
                Level1Header.AddRange(HierarchyLevels.Select(x => new SelectListItem() { Value = x.LevelID, Text = x.LevelDescr }).ToList());
            }