【问题标题】:Error: "foreach statement cannot operate on variables"错误:“foreach 语句不能对变量进行操作”
【发布时间】:2016-11-12 10:00:23
【问题描述】:

我很难弄清楚如何解决此错误消息:

错误 CS1579 foreach 语句无法对“A1.Models.Reviews”类型的变量进行操作,因为“A1.Models.Reviews”不包含“GetEnumerator”A1..NETCoreApp,Version=v1.0 的公共定义

@foreach (var item in Model)
                {
                    <content>
                        <header>
                            <hr id="ReviewsSide" />
                            <h6><b>&#64 @Html.DisplayFor(ModelItem => item.Heading)</b></h6>
                        </header>
                        <p>
                            Rating;

                            @{
                                int numStars = 0;

                                if (item.Rating == 5)
                                {
                                    numStars = 5;
                                }
                                else if (item.Rating == 4)
                                {
                                    numStars = 4;
                                }
                                else if (item.Rating == 3)
                                {
                                    numStars = 3;
                                }
                                else if (item.Rating == 2)
                                {
                                    numStars = 2;
                                }
                                else
                                {
                                    numStars = 1;
                                }



                                for (int i = 0; i < numStars; i++)
                                {
                                    <span style="color: #f8bd08; ">&#x2605;</span>
                                }
                                for (int i = 0; i < 5 - numStars; i++)
                                {
                                    <span>&#x2606;</span>
                                }


                            }
                        </p>
                 }

有什么想法吗?

我已将以下代码添加到我的 cshtml 页面顶部,但仍然出现相同的错误消息:

IEnumerable<A1.Models.Reviews>
@model Reviews

谢谢

【问题讨论】:

  • 您需要将模型更改为顶部的IEnumerable&lt;A1.Models.Reviews&gt; 类型以供您查看。
  • 嗯.. 它似乎仍然无法正常工作。我收到相同的错误消息。
  • 那行得通吗?
  • @model IEnumerable&lt;A1.Models.Reviews&gt;!然后将集合传递给视图。
  • 很遗憾没有。我仍然收到相同的错误消息。

标签: c# asp.net asp.net-mvc visual-studio-2015 asp.net-core


【解决方案1】:

你需要更换

IEnumerable<A1.Models.Reviews>
@model Reviews

@model IEnumerable<A1.Models.Reviews>

为了将一系列评论传递给您的 Razor 视图并能够对其进行迭代。

显示的错误意味着传递的类型不是序列,尽管您无法对其进行迭代。

话虽如此,您还需要确保将序列从控制器传递到视图,以便这 3 个部分正常工作。

【讨论】:

  • 除非控制器也被更改,否则只会抛出异常。
  • @StephenMuecke - 我认为这是正确的答案,因为 OP 的模型声明绝对不正确。似乎 OP 正在传递一个列表,但 View 无法枚举该对象的单个实例作为其当前声明的,它需要该对象类型的可枚举的东西。老实说,我很惊讶他用于模型声明的语法没有引发运行时错误。抱歉,只是想更好地理解您的评论
  • @Tommy OP 当前没有从控制器传递集合 - 只是一个 Reviews。如果是的话,它会抛出 The model item passed into the dictionary is of type .. but this dictionary requires a model item of type,所以 OP 还必须更改他们的 GET 方法以返回 IEnumerable&lt;Revews&gt;
【解决方案2】:

Reviews 是你写的一个类还是一个属性(我想它是一个类)。

如果我的猜测是正确的,我认为您的 Review 类应该公开一个 IEnumerable 类型的属性(或任何派生类如 List)。 视图中的 foreach 循环应该在此属性上循环,而不是在类实例上。

如果评论是一个属性,那么您应该确认它是一个 IEnumerable 类型。

希望这会有所帮助

【讨论】:

    猜你喜欢
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 2015-02-10
    相关资源
    最近更新 更多