我想在视图中使用两个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 ))
我怎么能这样做?
答案 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)