2016-11-02 100 views
0

Asp.NetCore EntityFrameWorkCore 库模式使用Linq填充下拉菜单?

我的项目建立然而下拉这里显示一些命名空间: Dropdown display namespace code instead of commodities

这里是我的代码:

型号:

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>

+1

如果你想IMPL然后使用SelectList构造函数。'new SelectList(context.Countries,“Oid”,“Code”)'https://msdn.microsoft.com/en-us/library/system.web.mvc .selectlist.selectlist(v = vs.118).aspx – JamieD77

+0

或'IEnumerable Countries = context.Countries.Select(x => new SelectListItem {Value = x.Oid,Text = x.Code});' –

+0

谢谢。你能告诉我哪个国家应该是什么样的财产? SelectListItem? Ienumerable ?? –

回答

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> 
+0

谢谢issac。这工作。为什么我需要两次传递Oid作为参数? –

+0

嗨EB,第一个Oid代表选择HTML元素(DropDownList)的值,第二个Oid代表select的文本;也就是显示给用户的值 – Issac