我已将数据库表中的一些数据分配到控制器中的viewbag中。由于没有包含数据,我的viewbag返回true。为什么会这样?
控制器
//bear in mind that there is no status == 1, all were status == 0
Viewbag.itemlist = db.Furnitures.Where(x => x.Status == 1).ToList();
查看
@if(Viewbag.itemlist != null)
{
//The string is displayed even tho it does not contain any data
<p>I appear</p>
}
答案 0 :(得分:3)
如果要检查列表是否为空,请尝试以下操作:
@if( ((List<Furnitures>) Viewbag.itemlist).Count > 0)
{
//The string is displayed even tho it does not contain any data
<p>I appear</p>
}
或
@if( ((List<Furnitures>) Viewbag.itemlist).Any())
{
//The string is displayed even tho it does not contain any data
<p>I appear</p>
}
正如@learnprogramming所指出的,第二种解决方案并不奏效。 .Any()不对List进行操作,它在IEnumerable上运行。
要使其正常工作,您需要添加
@using System.Linq
到视图文件的顶部。感谢@ColinM的提示。
来自@Colin的另一个提示。 MVC完全支持控制器和视图之间的模型绑定。
使用模型绑定而不是ViewBag传递数据会更好。 在你的ActionResult中你应该这样做:
var furnituresList = db.Furnitures.Where(x => x.Status == 1).ToList();
return View(furnituresList);
然后在你看来把它放在最前面(在@using指令之后):
@model List<Furnitures>
然后检查:
@if(Model.Count > 0)
{
//The string is displayed even tho it does not contain any data
<p>I appear</p>
}