使用 Linq 填充下拉列表?

Populate a dropdown using Linq?

Asp.NetCore 实体框架工作核心 存储库模式

我的项目构建但是下拉列表在这里显示了一些命名空间:

这是我的代码:

型号:

    public partial class Commodity
    {
        public Commodity()
        {

        }
        public IEnumerable<SelectListItem> CommodityCodes { get; set; };
        [Key]
        public Guid Oid { get; set; } = Guid.NewGuid();
        public string Code { get; set; }
        public string Description { get; set; }
}

接口 + 存储库:

public interface ICommodityRepository
{


    IEnumerable<Commodity> ListAll();
    IEnumerable<string> GetCommodityDropDown();
    IEnumerable<SelectListItem> GetSelectListItems(IEnumerable<string> elements);

}

Repository:
        public IEnumerable<string> GetCommodityDropDown()
        {
            Commodity model = new Commodity();
            var commodities = from c in model.Oid.ToString()
                              select c;
            return new List<string>
            {
                commodities.ToString()

            };
        }
        public IEnumerable<SelectListItem> GetSelectListItems(IEnumerable<string> elements)
        {
            var selectList = new List<SelectListItem>();

            foreach (var element in elements)
            {
                selectList.Add(new SelectListItem
                {
                    Value = element,
                    Text = element
                });
            }

            return selectList;
        }

控制器:

public IActionResult Index()
{
    var codes = _commodityRepository.GetCommodityDropDown();
    var model = new Commodity();
    model.CommodityCodes = _commodityRepository.GetSelectListItems(codes);
    return View(model);
}

最后是我的观点:

  <div class="form-group">
  @Html.DropDownListFor(m => m.Code, Model.CommodityCodes,
 "- Please select a Commodity -",new { @class = "form-control" })
  </div>

这样做...

public interface ICommodityRepository
{
    SelectList ListAll();
}

public class CommodityRepository : ICommodityRepository
{
    private DataBaseContext db = new DataBaseContext ();
    // Note: Your database context should define this property:
    //       public DbSet<Commodity> CommoditySet{ get; set; }

    public SelectList ListAll(){
       return new SelectList( db.CommoditySet, "Oid", "Oid" );
    }
}
Define a view model:
Note: You shouldn't use your model here. Define a view model instead 
public class CommodityViewModel
{
     public  string Code{ get; set; }
     public SelectList CommodityCodes{ get; set; } 
}

Controller:

public IActionResult Index()
{
   CommodityViewModel viewModel= new CommodityViewModel();
   viewModel.CommodityCodes= repository.ListAll();

   return View(viewModel);
}

 view:

  <div class="form-group">
      @Html.DropDownListFor(m => m.Code, Model.CommodityCodes,
 "- Please select a Commodity -",new { @class = "form-control" })
  </div>