出现错误 foreach 语句无法对 '' 类型的变量进行操作,因为 '' 不包含 'GetEnumerator' 的公共定义

问题描述 投票:0回答:3

我的剃刀视图中出现错误:

foreach 语句不能对类型的变量进行操作 'Project.Model.ResultsClass' 因为 'Project.Model.ResultsClass' 确实 不包含“GetEnumerator”的公共定义

这是我的

foreach
以及我如何定义
Model

@model Project.Models.ResultsClass

@foreach (var item in Model) {
}

这是控制器方法:

public ActionResult Results()
{
    var results = db.Data.SqlQuery("SELECT * FROM Results").ToList();
    ResultsClass result = new ResultsClass();

    result.previewID = results[0].id;
    result.dateSlot = results[0].dateSlot;
    result.timeSlot = results[0].timeSlot;
    result.startTime = results[0].startTime;
    result.dateCreated = results[0].dateCreated;

    return View(result);
}

这是我的课:

public class ResultsClass
{
    [DisplayName("Preview ID")]
    public int previewID { get; set; }
    [DisplayName("Date")]
    public string dateSlot { get; set; }
    [DisplayName("Time")]
    public string timeSlot { get; set; }
    [DisplayName("Start Time")]
    public DateTime startTime { get; set; }
    [DisplayName("Completed Time")]
    public DateTime dateCreated { get; set; }
}

我不明白我做错了什么?

c# asp.net asp.net-mvc razor
3个回答
10
投票

您已经传递了

result
,它是
ResultsClass
的类型,而不是
ResultsClass
的集合,然后尝试迭代它,就好像它是一个集合一样,这样您就无法在您的
foreach
中使用它环形。因此,为了能够在其上使用
foreach
,您必须将其设为集合。例如,如果您传递
foreach
而不是
results
,则
result
循环将起作用:

return View(results);

@model List<Project.Models.ResultsClass>

@foreach (var item in Model) {
}

1
投票

这行是罪魁祸首:

@model Project.Models.ResultsClass

如果您想要将列表(集合)返回到视图,那么该行会导致控制器操作出现问题。

基本上在视图中,该行意味着您想要显示 1 个

ResultsClass
对象。而不是
ResultsClass
对象的集合,因此您不能仅迭代 1 个
ResultsClass
对象。

但现在,您只需调用要返回视图的

ResultsClass
对象的属性即可解决该问题。

@model Project.Models.ResultsClass

@Html.DisplayFor(modelItem => item.previewID)
@Html.DisplayFor(modelItem => item.dateSlot)
@Html.DisplayFor(modelItem => item.timeSlot)
@Html.DisplayFor(modelItem => item.startTime)
@Html.DisplayFor(modelItem => item.dateCreated)

只需在控制器操作中传递

results
对象即可:

public ActionResult Results()
{
    var results = db.Data.SqlQuery("SELECT * FROM Results").ToList();
    return View(results);
}

那么在你看来:

@model IEnumerable<Project.Models.ResultsClass>

@foreach (var item in Model) {
    // .. display properties
}

0
投票

这是因为你的模型不是一个集合。它是一个物体。如果你想迭代某些东西,它必须是一个集合,如数组或列表。

试试这个:

@model Project.Models.ResultsClass

@foreach (var item in Model.result) {
}
© www.soinside.com 2019 - 2024. All rights reserved.