Search code examples
c#asp.net-corerazorentity-framework-corerazor-pages

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


I am using .net core with EF and Razor pages.

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

       

    }

in view

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

but error is

Cannot convert generic list to IEnumerable.

I a bit new to this and tried but it's not working I think it should have worked because technically I am calling methods based on model.

In DonorsDBContext class

   public List<BloodGroups> GetBloodGroups()
        {

            var list = new List<BloodGroups>();

            list = this.BloodGroups.ToList();

            return list;
        }

Solution

  • Change your code like below:

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

    Be sure ListBloodGroups in your backend contains data.

    My testing data in backend:

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