繁体   English   中英

“模型”不包含“对象”的定义

[英]'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.TeachersIEnumerable<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM