我在视图中使用包含项目的列表,但它抛出转换错误,为什么?

I am using a List which contains items, in the view but it throws conversion error, why?

我正在将 .net 核心与 EF 和 Razor 页面一起使用。

 List<BloodGroups> ListBloodGroups;
        public void OnGet()
        {
            BloodGroupsModel.ListBloodGroups = _donorsDBContext.GetBloodGroups();


        }

bloodgroups.cs

    public class BloodGroups
    {
        public BloodGroups() 
        {

        }

        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int BloodGroupID { get; set; }
        public string BloodGroupName { get; set; }
        
        public List<BloodGroups> ListBloodGroups { get; set; }         

       

    }

可见

 <select asp-for="BloodGroupsModel.BloodGroupID" asp-items="Model.BloodGroupsModel.ListBloodGroups"></select>

但错误是

无法将泛型列表转换为 IEnumerable。

我对此有点陌生并尝试过但它不起作用我认为它应该起作用因为技术上我正在调用基于模型的方法。

在 DonorsDBContext class

   public List<BloodGroups> GetBloodGroups()
        {

            var list = new List<BloodGroups>();

            list = this.BloodGroups.ToList();

            return list;
        }

像下面这样更改您的代码:

<select asp-for="BloodGroupsModel.BloodGroupID" 
        asp-items="@(new SelectList(Model.BloodGroupsModel.ListBloodGroups,"BloodGroupID","BloodGroupName"))"></select>

确保后端中的 ListBloodGroups 包含数据。

我在后端的测试数据:

public BloodGroups BloodGroupsModel { get; set; }
public IActionResult OnGet()
{
    BloodGroupsModel = new BloodGroups();
    BloodGroupsModel.ListBloodGroups = new List<BloodGroups>()
    {
        new BloodGroups(){BloodGroupID=1,BloodGroupName="aaa"},
        new BloodGroups(){BloodGroupID=2,BloodGroupName="bbb"},
        new BloodGroups(){BloodGroupID=3,BloodGroupName="ccc"}
    };
    return Page();
}

试试这个:

public List<SelectListItem> GetBloodGroups()
 {
       return  _donorsDBContext.Select( i=> new SelectListItem
         {
         Value = i.BloodGroupID.ToString(),
         Text = i.BloodGroupName 
         }).ToList();
}

并更改您的血型:

public List<SelectListItem> ListBloodGroups {get; set;}