从控制器传递列表以查看导致在视图中找不到任何模型/命名空间

时间:2016-10-08 16:51:20

标签: asp.net-mvc razor

这是我的代码: 控制器 -

DatabaseContext db = new DatabaseContext();
List<users> UsersToView = new List<users>();
UsersToView = db.users.ToList();

return View(UsersToView);

查看 -

我写道:@model List<UsersToView> 但这给了我一个错误:

  

严重级代码描述项目文件行抑制状态   错误CS0246类型或命名空间名称&#39; UsersToView&#39;找不到(你错过了使用指令或汇编引用吗?)

我不确定我在这里做错了什么。

3 个答案:

答案 0 :(得分:2)

您可以像这样传递users列表:

控制器:

DatabaseContext db = new DatabaseContext();

return View(db.users.ToList());

并查看:

@model IEnumerable<users>

答案 1 :(得分:1)

您的控制器代码看起来不错。在View

中尝试使用此代码

第一种方式

@model IList<users>

第二种方式

@model IEnumerable<users>

答案 2 :(得分:1)

我知道其他答案可能会解决您的问题,但让我添加一个关于问题本身的快速说明:

  

我写道:@model List<UsersToView>但这给了我一个错误

您在该行代码中出错的原因是,当您编写@model时,编译器期望接下来的内容是数据类型。因此,您可以通过这种方式明确声明模型应具有哪种数据类型。虽然声明是正确的,但UsersToView不是类型的东西,但它是在控制器中声明的局部变量,所以视图甚至看不到它,并试图将其解释为未知输入List<UsersToView>。基本上你现在说的是你的模型是一个未知类型的列表。

这就是编译器说的原因:

  

类型或命名空间名称&#39; UsersToView&#39;无法找到

您应该做的是在模型声明中声明UsersToView的实际类型,而不是变量名称,如其他答案中所述:

@model IEnumerable<users>

所以请注意,现在它已使用users代替UsersToView。当然我写的IEnumerableList更通用,所以你也可以向视图发送一个users数组,但如果你需要List的LINQ方法当然你可以这样做:

@model List<users>