2013-04-16 3 views
5

SelectList와 선택 영역을 저장할 필드를 제공하는 List에서 동적으로 DropDownLists를 만들고 싶습니다.foreach 루프에 많은 DropDownListFor를 만듭니다.

public class ViewModel 
{ 
    public List<Material_Select> materialSelect { get; set; } 
} 

public class Material_Select 
{ 
    public SelectList selectList { get; set; } 
    public int MaterialId { get; set; } 
} 

보기에서 materialSelect List를 반복하고 DropDownLists를 동적으로 만들고 싶습니다. 이 같은

뭔가 :

int count = 0; 
foreach (var item in Model.materialSelect) 
{ 
    count++; 
    <div class="editor-label"> 
     @Html.LabelFor(model => model.materialSelect) 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownListFor(item.MaterialId, item.selectList) 
    </div>  
} 

HttpPost ActionResult에서 내가 선택한 값을 얻을 필요가있다. 누구든지이 문제를 해결하는 방법을 알고 있습니까?

+0

foreach 루프를 사용하여 컬렉션의 양식 컨트롤을 생성 할 수 없습니다. [이 답변] (http://stackoverflow.com/questions/30094047/html-table-to-ado-net-datatable/30094943)을 참조하십시오. # 30094943) 설명을 위해) –

답변

6

당신은 아마 EditorTemplates를 사용해야합니다. 이것들은 당신이 묘사하고있는 것을 우스꽝스럽게 할 수있게 해줍니다. 당신의 강력한 형식의 부분보기를 만들 경우 ~/조회/공유/EditorTemplates/Material_Select.cshtml (뷰가 모델과 동일한 이름이어야한다)처럼 보이는 : 전체 형태로 다음

@model Material_Select 

<div class="editor-label"> 
    @Html.LabelFor(m => m.MaterialId) 
</div> 
<div class="editor-field"> 
    @Html.DropDownListFor(m => m.MaterialId, Model.selectList) 
</div> 

@Html.EditorFor(m => m.materialSelect) 

자동으로 컬렉션을 열거하고 컬렉션의 각 항목에 대한 편집기 템플릿을 렌더링합니다.

+1

그게 전부 마술 같아. :) – float

5

0 카운트 시작을 가정하고 행동 포스트 방법은 유형 뷰 모델의 매개 변수를 받고, 각 드롭 다운에 대한 바인드의 MaterialId을이 시도 할 수 있습니다 :

foreach (var item in Model.materialSelect) 
{ 
    count++; 
    <div class="editor-label"> 
     Name for de dropdown 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownList("materialSelect[" + count + "].MaterialId ", item.selectList) 
     @Html.ValidationMessageFor(model => model.gradationId) 
    </div>  
} 
+0

고마워! 나는 당신의 대답에 변화를주었습니다. @Ian Routledge는 기본적인 mvc 기술을 사용하므로 더 잘 맞습니다. – float

관련 문제