2016-11-02 3 views
0

Asp.NetCore EntityFrameWorkCore 저장소 패턴Linq를 사용하여 드롭 다운을 채우시겠습니까?

내 프로젝트 그러나 드롭 다운은 여기에 몇 가지 네임 스페이스를 표시 빌드 :

모델 :

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

인터페이스 다음 Dropdown display namespace code instead of commodities

내 코드입니다 + 저장소 :

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를 만든 다음 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 => 새 SelectListItem {값 = x.Oid, 텍스트 = x.Code}), ' –

+0

감사. 국가가 어떤 종류의 재산을 가져야하는지 말해 줄 수 있습니까? 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> 
+0

감사합니다. 이것은 효과가 있었다. Oid를 매개 변수로 두 번 전달해야하는 이유는 무엇입니까? –

+0

안녕 EB, 첫 번째 Oid는 선택 HTML 요소 (DropDownList)의 값을 나타내며 두 ​​번째 Oid는 선택 텍스트를 나타냅니다. 즉, 사용자에게 표시되는 값 – Issac

관련 문제