Foreach使用两个viewbag

时间:2013-03-13 14:21:58

标签: c# winforms

我想在视图中使用两个viewbag做一个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 ))

我怎么能这样做?

2 个答案:

答案 0 :(得分: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方法返回Stage对象的列表,其中包含正确的Actions。(您应根据需要在此处进行过滤以获取每个阶段的相关操作)。

现在,在我们的CreateSomeThingVM视图模型中强类型的View中,写一些干净的代码

@model CreateSomeThingVM

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

答案 1 :(得分:1)

in 关键字后,第二个循环中的表达式看起来像是布尔值而不是IEnumerable。 你的意思是使用.where()来过滤一个可枚举的吗? 或许:

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