Asp .Net MVC,为什么我的viewbag总是不为空?

时间:2018-06-13 09:03:43

标签: asp.net-mvc

我已将数据库表中的一些数据分配到控制器中的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>
}

1 个答案:

答案 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的提示。

更新2

来自@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>
}