0

我试图通过 foreach 循环向我的视图显示数据,但我无法定义@model 有人可以帮我吗?

这是我的服务方法

public IEnumerable<CategoryType> GetCatList()
        {
            ShopEntities context = new ShopEntities();

            List<Category> produkty = context.Category.ToList<Category>();

            return changeTypee(produkty);
        }

        private List<CategoryType> changeTypee(List<Category> categorie)
        {
            List<CategoryType> productTypes = new List<CategoryType>(); ;
            CategoryType product = new CategoryType();
            foreach (var c in categorie)
            {
                product.ID = c.ID;
                product.Name = c.Name;
                productTypes.Add(product);
            }

            return productTypes;
        }

这是我的合同

[OperationContract()]
        IEnumerable<CategoryType> GetCatList();

这是我的控制器方法

public ActionResult Index()
        {
            ServiceReference1.Service1Client proxy = new ServiceReference1.Service1Client();

            return View(proxy.GetCatList());
        }

错误信息

Compiler Error Message: CS1579: foreach statement cannot operate on variables of type 'System.Web.Mvc.ViewPage<System.Collections.Generic.IEnumerable<Shop.Data.CategoryType>>' because 'System.Web.Mvc.ViewPage<System.Collections.Generic.IEnumerable<Shop.Data.CategoryType>>' does not contain a public definition for 'GetEnumerator'
4

1 回答 1

0

我假设您认为您会遇到此错误?听起来你在做:

@foreach (var item in this) { ... }

代替

@foreach (var m in this.Model) { ... }

我这么说的原因是错误说ViewPage<T>没有GetEnumerator,它没有 - 它是不可枚举的。

编辑

实际上是这个问题,但不像我描述的那样。您正在使用:

@model ViewPage<IEnumerable<MVC4WebApp_InternetApp.Controllers.CategoryType>> 

因此,您的模型是 type ViewModel<T>,而不是您需要:

@model IEnumerable<MVC4WebApp_InternetApp.Controllers.CategoryType>

编辑 2

  1. 您还需要使用 this@Html.DisplayFor( m => item.Name);而不是DisplayForModel.
  2. 你的changeTypee方法搞砸了

您需要CategoryType product = new CategoryType();在循环内部而不是外部执行操作,否则您将返回一个列表,其中每个条目都具有最后一个条目的值:

// Don't do it here: CategoryType product = new CategoryType();
foreach (var c in categorie)
{
    // do it here
    CategoryType product = new CategoryType();
    product.ID = c.ID;
    product.Name = c.Name;
    productTypes.Add(product);
}
于 2013-05-18T19:21:58.747 回答