[英]'Model' does not contain a definition for 'Object"
我正在尝试从SQL查询中打印出数据,但是一次又一次地遇到错误。
基本上,我想做的是从数据库中提取教师的一些数据,然后在我看来列出这些数据。 但是,每次尝试打印时,都会出现此错误
“ ViewModel”不包含“ FirstName”的定义,找不到包含“ ViewModel”类型的第一个参数的扩展方法“ FirstName”。
这是我的代码;
视图模型
namespace Ability.Models
{
public class ViewModel
{
public virtual IEnumerable<Teacher> Teachers { get; set; }
public Teacher Teacher { get; set; }
public virtual IEnumerable<Skill> Skills { get; set; }
public Skill Skill { get; set; }
}
}
控制者
public ActionResult Index()
{
string campus = Request.Params["Campus"];
if (campus != null)
{
if (campus == "Alle")
{
var teachers = (from t in db.Teachers
select t);
}
else
{
var teachers = (from t in db.Teachers
where t.Campus == campus
select t );
}
}
else
{
var teachers = (from t in db.Teachers
select t);
}
var Model = new ViewModel
{
Teachers = db.Teachers.ToList(),
};
return View(Model);
}
视图
@model IEnumerable<Ability.Models.ViewModel>
<h2>Teachers at Thomas More</h2>
...
@foreach (var Teacher in Model)
{
<tr>
<td>
@Teacher.FirstName
</td>
<td>
@Teacher.LastName
</td>
<td>
@Teacher.Email
</td>
<td>
@Teacher.Campus
</td>
</tr>
}
我不确定它是否可以计算,但是我已经尝试做一些事情,包括将循环更改为
@foreach (var Teacher in Model.Teachers)
但是我收到类似的错误
“ IEnumerable”不包含“ Teachers”的定义,并且找不到找到接受“ IEnumerable”类型的第一个参数的扩展方法“ Teachers”
期待我能收到的任何帮助!
我看到一些没有意义的事情。
首先,您在哪里使用teachers
?
我个人认为以下代码更合理:
public ActionResult Index()
{
IEnumerable<Teacher> teachers = Enumerable.Empty<Teacher>();
string campus = Request.Params["Campus"];
if (campus != null)
{
if (campus == "Alle")
{
teachers = (from t in db.Teachers
select t);
}
else
{
teachers = (from t in db.Teachers
where t.Campus == campus
select t );
}
}
else
{
teachers = (from t in db.Teachers
select t);
}
var Model = new ViewModel
{
Teachers = teachers
};
return View(Model);
}
其次,您还必须在上述操作方法中初始化ViewModel
的其他属性。
现在,我们来看一下。 您在那里传递了ViewModel
类型的ViewModel
。 当您要遍历教师顺序时,可以尝试以下操作:
@foreach (var teacher in Model.Teachers)
{
<tr>
<td>
@teacher.FirstName
</td>
<td>
@teacher.LastName
</td>
<td>
@teacher.Email
</td>
<td>
@teacher.Campus
</td>
</tr>
}
只要 db.Teachers
是IEnumerable<Teacher>
,上述所有内容都是有意义的。
您正在将ViewModel
类型发送到视图:
var Model = new ViewModel
{
Teachers = db.Teachers.ToList(),
};
return View(Model);
但是期望类型为IEnumerable<Ability.Models.ViewModel>
:
@model IEnumerable<Ability.Models.ViewModel>
也就是说,它期望在您提供对象的集合中。
鉴于视图中的用法,似乎您应该对其进行更改以期望使用单个对象:
@model Ability.Models.ViewModel
这将允许您直接访问您要查找的属性:
@foreach (var Teacher in Model.Teachers)
旁注:控制器中的逻辑看起来不正确。 您有条件地创建teachers
变量,但是从不使用它。 取而代之的是,您只需在数据库中实例化所有教师,然后将其全部发送到视图。 如果您打算与所有老师见面,则可以删除大部分代码。 如果您打算看特定的教师,则需要使用您创建的变量。 请参考@Christos的答案以获取实际示例。
您的模型是ViewModels的列表。 您需要使用@foreach (var Teacher in Model.Teachers)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.