foreach语句不能对类型''的变量进行操作,因为''不包含'GetEnumerator'的公共定义

时间:2011-09-21 19:17:54

标签: asp.net-mvc-2

我有这样的错误    描述:编译服务此请求所需的资源时发生错误。请查看以下特定错误详细信息并相应地修改源代码。

Compiler Error Message: CS1579: foreach statement cannot operate on variables of type 'EventListing.Models.EventInfo' because 'EventListing.Models.EventInfo' does not contain a public definition for 'GetEnumerator'

Source Error:

Line 106:                </th>
Line 107:            </tr>
Line 108:            <% foreach (var model in Model)
Line 109:               { %>
Line 110:            <tr>

模型

public static List<EventInfo> EventList()
        {
            var list = new List<EventInfo>();
            Dbhelper DbHelper = new Dbhelper();
            DbCommand cmd = DbHelper.GetSqlStringCommond("SELECT * FROM WS_EVENTINFO");
            DbDataReader Datareader = DbHelper.ExecuteReader(cmd);
            while (Datareader.Read())
            {
                EventInfo eventinfo = new EventInfo()
                {
                    EVENT_ID = Convert.ToInt32(Datareader[

查看页面

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<EventListing.Models.EventInfo>" %>
 <% foreach (var model in Model)
               { %>
            <tr>
                <td>
                    <%= Html.ActionLink(Model.TITLE,"Detail", new {id = Model.EVENT_ID})%>

如何解决这个问题,我正在使用MVC2框架。

2 个答案:

答案 0 :(得分:5)

您需要将集合绑定为模型。查看此帖子了解详情:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

查看

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<IList<EventListing.Models.EventInfo>>" %>

控制器

public ActionResult List()
{
   return this.View(EventList());
}

或者使用其他类型的模型并在其中定义属性List<EventInfo> Events。然后按以下方式迭代:

<% foreach (var model in Model.Events)
    { %>

此外,Visual Studio可以为您完成:

enter image description here

enter image description here

答案 1 :(得分:2)

大概你要做的是:

 foreach(var model in Model.EventList()) {..}

虽然很难确定。

如果您需要使用的语法,则Model必须是具有GetEnumerator()方法的类的对象。