将SelectListItem添加到SelectList

时间:2015-01-06 19:02:33

标签: asp.net asp.net-mvc entity-framework

我有一个使用Entity框架的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; }
    }
}

usersController

    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);
    }

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

试试这个:

IEnumerable<SelectListItem> FacultyList { get; set; }

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

答案 1 :(得分:1)

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

您有两个选择:

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

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

答案 2 :(得分:0)

这可能对某人有所帮助。

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