【问题标题】:Populate a dropdown using Linq?使用 Linq 填充下拉列表?
【发布时间】:2016-11-02 19:24:04
【问题描述】:

Asp.NetCore EntityFrameWorkCore 存储库模式

我的项目已构建,但下拉列表会在此处显示一些命名空间:

这是我的代码:

型号:

    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>

【问题讨论】:

  • 如果你想实现一个选择列表.. 然后使用 SelectList 构造函数.. new SelectList(context.Countries, "Oid", "Code") msdn.microsoft.com/en-us/library/…
  • IEnumerable&lt;SelectListItem&gt; Countries = context.Countries.Select(x =&gt; new SelectListItem { Value = x.Oid, Text = x.Code });
  • 谢谢。你能告诉我国家应该是什么样的财产吗?选择列表项?可枚举??

标签: asp.net-core ienumerable selectlist selectlistitem


【解决方案1】:

这样做...

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>

【讨论】:

  • 谢谢你,伊萨克。这行得通。为什么我需要将 Oid 作为参数传入两次?
  • 嗨 EB,第一个 Oid 代表 select HTML 元素(DropDownList)的值,第二个 Oid 代表 select 的文本;也就是显示给用户的值
猜你喜欢
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 2012-11-07
  • 2016-05-12
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多