1

我想在视图中使用两个视图包进行 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 ))

我怎么能做到这一点?

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方法返回一个Stage对象列表及其正确的Actions.(您应该根据需要在此处进行过滤以获取每个阶段的相关操作)。

现在在我们的 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之后,它看起来像第二个循环中的表达式。您是不是要使用 .where() 来过滤可枚举的对象?
也许:

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