获取错误foreach语句不能对类型''的变量进行操作。因为''不包含' GetEnumerator'的公开定义

时间:2017-09-13 16:43:11

标签: c# asp.net asp.net-mvc razor

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

  

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; }
}

我不明白我做错了什么?

3 个答案:

答案 0 :(得分:2)

您已经传递了result ResultsClass,而不是ResultsClass的集合,然后尝试迭代它,就好像它是一个集合所以你无法在foreach循环中使用它。因此,为了能够在其上使用foreach,您必须将其设为集合。例如,如果您通过foreach而不是results,则result循环有效:

return View(results);

@model List<Project.Models.ResultsClass>

@foreach (var item in Model) {
}

答案 1 :(得分:0)

这是因为您的模型不是集合。这是一个对象。如果你想迭代它,它必须是一个像数组或列表的集合。

试试这个:

@model Project.Models.ResultsClass

@foreach (var item in Model.result) {
}

答案 2 :(得分:0)

这条线是罪魁祸首:

@model Project.Models.ResultsClass

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

基本上在视图中,该行意味着您要显示1 ResultsClass个对象..而不是ResultsClass个对象的集合,因此您不能仅仅迭代1 {{1} {{ 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);
}

如果有帮助,请告诉我。