将 SelectListItem 添加到 SelectList

Adding SelectListItem to SelectList

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

我正在尝试将院系添加到 select 列表中,用于在编辑用户期间使用的下拉框。我收到错误:

"Cannot implicitly convert type 'System.Collections.Generic.List' to '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; }

和:

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

当您使用 ToList() 时,枚举将转换为 List<SelectListItem>,无法转换为 SelectList

您有 2 个选择:

  1. FacultyList 属性 更改为 List<SelectListItem>.
  2. 类型
  3. 将查询转换为 SelectList(参见下面的代码)。

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