Asp.net 将带有列表的ViewBag传递给foreach循环的视图
我正在通过Viewbag将查询结果从控制器传递到视图,但是当循环查看Viewbag结果时,我得到错误“object”不包含“Ratings”的定义,即使它在调试时显示。我没有为查询使用模型,因此无法强制转换列表 如何将查询列表或查询结果本身发送到视图,以便循环并提取数据 控制器Asp.net 将带有列表的ViewBag传递给foreach循环的视图,asp.net,asp.net-mvc,asp.net-mvc-5,viewbag,Asp.net,Asp.net Mvc,Asp.net Mvc 5,Viewbag,我正在通过Viewbag将查询结果从控制器传递到视图,但是当循环查看Viewbag结果时,我得到错误“object”不包含“Ratings”的定义,即使它在调试时显示。我没有为查询使用模型,因此无法强制转换列表 如何将查询列表或查询结果本身发送到视图,以便循环并提取数据 控制器 var AppQuery = (from ans in db.Answers join ques in db.Questions on ans.QuestionID equ
var AppQuery = (from ans in db.Answers
join ques in db.Questions on ans.QuestionID equals ques.QuestionID
join resp in db.Responses on ans.ResponseID equals resp.ResponseID
join sec in db.Sections on ques.SectionID equals sec.SectionID
where resp.ResponseID == ID && ques.SubSectionName != null
select new { SectionName = sec.SectionName, RatingAnswer = ans.RatingAnswer })
.GroupBy(a => a.SectionName)
.Select(a => new { SectionName = a.Key, Ratings = a.Sum(s => s.RatingAnswer) });
ViewBag.Results = AppQuery.ToList();
查看
@{var Results = ViewBag.Results;}
@foreach (var item in Results)
{
var style = "active";
var condition = "";
if (item.Ratings >= 90)
{
style = "success";
condition = "Excellent";
}
else if (item.Ratings < 50)
{
style = "danger";
condition = "Critical";
}
else
{
style = "active";
condition = "Stable";
}
<tr class="@style">
<td>@item.SectionName</td>
<td>@item.Ratings</td>
<td>@condition</td>
</tr>
}
@{var Results=ViewBag.Results;}
@foreach(结果中的var项目)
{
var style=“活动”;
var条件=”;
如果(项目评级>=90)
{
style=“成功”;
条件=“极好”;
}
否则,如果(项目等级<50)
{
style=“危险”;
条件=“严重”;
}
其他的
{
style=“活动”;
条件=“稳定”;
}
@item.SectionName
@项目.评级
@状况
}
谢谢你的帮助 这是预期的行为!。因为您为ViewBag设置了匿名对象的集合 您应该使用强类型视图模型
public class RatingVm
{
public string SectionName { set;get;}
public int Ratings { set;get;}
}
在你的行动方法中
public ActionResult Create()
{
var results= (from ans in db.Answers
join ques in db.Questions on ans.QuestionID equals ques.QuestionID
join resp in db.Responses on ans.ResponseID equals resp.ResponseID
join sec in db.Sections on ques.SectionID equals sec.SectionID
where resp.ResponseID == ID && ques.SubSectionName != null
select new { SectionName = sec.SectionName,
RatingAnswer = ans.RatingAnswer })
.GroupBy(a => a.SectionName)
.Select(a => new RatingVm { SectionName = a.Key,
Ratings = a.Sum(s => s.RatingAnswer) }).ToList();
return View(results);
}
现在,您的视图应该是强类型的,与我们从action方法传递的数据类型一致,action方法是RatingVm
@model List<RatingVm>
<h1>Ratings</h1>
@foreach(var item in Model)
{
<p>@item.SectionName</p>
<p>@item.Ratings</p>
}
@型号列表
评级
@foreach(模型中的var项目)
{
@item.SectionName
@项目.评级
}
啊,这么简单,让我觉得自己很愚蠢。谢谢你的帮助。