1

このようにビューで2つのviewbagを使用してforeachを実行したいのですが、2番目の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 ))

どうすればこれを行うことができますか?

4

2 に答える 2

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

そして、Actionメソッドで、データを取得してプロパティを設定します。

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

  vm.Stages=GetListOfStagesFromSomeWhereWithItsActions();

  return View(vm);
}

メソッドが適切なオブジェクトGetListOfStagesFromSomeWhereWithItsActionsのリストを返すと仮定します(各ステージに関連するアクションを取得するには、必要に応じてここでフィルタリングを実行する必要があります)。StageActions

CreateSomeThingVMビューモデルに強く型付けされたビューに、クリーンなコードを記述します。

@model CreateSomeThingVM

@foreach(var stage in Model.Stages)
{
  <h2>@stage.StageName</h2>
  foreach(var action in Model.Actions)
  {
    <p>@action.ActionName</p>
  }
}
于 2013-03-13T14:34:58.227 に答える
1

inキーワードがIEnumerableではなくブール値に評価された後の2番目のループの式のように見えます。代わりに.where()を使用して列挙可能なものをフィルタリングするつもりでしたか?
多分:

Viewbag.actions.where( a => a.IdStage == item.IdStage)
于 2013-03-13T14:34:58.783 に答える