将 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 个选择:
- 将
FacultyList
属性 更改为 List<SelectListItem>
. 类型
- 将查询转换为
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());
}
我有一个使用 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 个选择:
- 将
FacultyList
属性 更改为List<SelectListItem>
. 类型
- 将查询转换为
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());
}