2016-11-02 9 views
0

Asp.NetCore EntityFrameWorkCore Repository PatternЗаполнить раскрывающееся меню 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

если вы пытаетесь осущ ement selectlist .. затем используйте конструктор 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 Страны = 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 обозначает значение элемента select HTML (DropDownList), вторая Oid обозначает текст select; то есть значение, отображаемое пользователю – Issac

 Смежные вопросы

  • Нет связанных вопросов^_^