2013-03-13 3 views
1

뷰에서 두 개의 뷰백을 사용하여 foreach를 수행하려고하지만 두 번째 foreach에서 오류가 발생합니다.두 개의 뷰백을 사용하는 Foreach

@foreach (var item in ViewBag.stages) 
{ 
     <div id="style101"> 
     <h2><span> <strong>@item.NameStage</strong></span></h2> 
     </div> 
    foreach (var item2 in (ViewBag.actions.IdStage == item.IdStage)) 

어떻게하면됩니까?

+1

ViewBag에서 전달하는 데이터는 무엇입니까? 이를 수행하는 더 좋은 방법이 있어야합니다. – Shyju

답변

3

ViewBag/ViewData을 사용하여 작업 방법에서보기로 데이터를 전달하지 않도록하십시오. 당신은 이것이 당신의 시선을 약간 더럽게 만들었다는 것을 깨달았어야합니다. 강력한 형식의 뷰 모델을 사용하십시오.

보기를 만드는 것으로 가정합니다. 그래서 그것을위한 뷰 모델을 만드십시오. 각 단계마다 여러 개의 액션이 있다고 가정합니다.

public class CreateSomeThingVM 
{ 
    public string Title { set;get;} 
    public List<Stage> Stages { set;get;} 

    public CreateSomeThingVM() 
    { 
    Stages=new List<Stage>(); 
    } 
} 
public class Stage 
{ 
    public int ID { set;get;} 
    public string StageName { set;get;} 
    public List<Action> Actions { set;get;} 
    public Stage() 
    { 
    Actions =new List<Action>(); 
    } 
} 
public class Action 
{ 
    public int ID { set;get;} 
    public string ActionName { set;get;} 
} 

작업 방법에서 데이터를 가져 와서 속성을 설정하십시오. GetListOfStagesFromSomeWhereWithItsActions 방법을 Assumuing

public ActionResult Create() 
{ 
    var vm=new CreateSomeThingVM(); 

    vm.Stages=GetListOfStagesFromSomeWhereWithItsActions(); 

    return View(vm); 
} 

는 적절한 ActionsStage 개체의 목록을 반환합니다. (각 단계에 대한 관련 조치를받을 필요에 따라 여기에 필터링을 수행해야합니다).

강력하게 우리의 CreateSomeThingVM보기 모델에 입력 된보기에 지금

,

@model CreateSomeThingVM 

@foreach(var stage in Model.Stages) 
{ 
    <h2>@stage.StageName</h2> 
    foreach(var action in Model.Actions) 
    { 
    <p>@action.ActionName</p> 
    } 
} 
1

그것은 에서 키워드 다음에 두 번째 루프의 표현처럼 보이는이 아닌 부울로 평가 깨끗한 약간의 코드를 작성 IEnumerable. 대신 열거 형을 필터링하려면 .where()를 사용 하시겠습니까?
아마도 :

Viewbag.actions.where(a => a.IdStage == item.IdStage) 
+0

이 사용하고 작동하지 않습니다. ( – kalu

+0

이 오류가 발생합니다 : 먼저 대리자 또는 식 트리 형식으로 캐스팅하지 않고 동적으로 전달 된 작업에 대한 인수로 람다 식을 사용할 수 없습니다. – kalu

+0

actions 속성을 캐스팅해야합니다 (kalusTypeForAction) Viewbag.action) .where (...) IEnumerable의 확장을 사용하기 위해 포함 된 구체적인 유형으로 변환합니다. –

관련 문제