在ASP .NET MVC中将IEnumerable变量传递给视图

4

我会一点英语,尝试提出我的问题。

我有一个模型,它的名字是Product.cs。

  Product
  {
    public int TypeId { get; set; }/*these are at the same time field of Type Table*/
    public string TypeName { get; set; }

    public int TradeMarkId { get; set; }/*at the same time field of TradeMark Table*/
    public string TradeMarkName { get; set; }

    public int ProductId { get; set; }/*at the same time field of TProduct Table*/
    public string ProductName { get; set; }
    public int TId { get; set; }
    public int TMId { get; set; }

    public List<TypeProduct> typeList { get; set; }
  }

我的控制器页面

  My controller 
  [HttpGet]
  public ActionResult TradeMarkProduckAdd()
  {
    Product product = new Product();
    TypeList typeList = new TypeList();
    product = typeList.TypeListOf(product);
    return View(product);//"This doesn't work"            
  }

错误提示为类型错误,字典要求的模型项类型是'System.Collections.Generic.IEnumerable`1[TypeMark.Models.Product]', 但传入的模型项类型为 'TypeMark.Models.Product'。

当我遇到这个错误时,我将 return View(product); 更改为 return View((IEnumerable)product); ,但还是无法解决问题。

视图页面

    @using TypeTradeMark.Models
    @model IEnumerable<Product>
    @using (Html.BeginForm("AddProduct", "Home", FormMethod.Post))
    {
      @foreach(var item in Model as List<Product>)
      {                              
        @item.ProductName
        @item.??//checkbox for every record      
        @item.??//dropdownlist for trademarks      
      }    
    }

TypeList class

    TypeList class

    public class TypeList
    {
      VtDataContext Vt = new VtDataContext();
      public Product TypeListOf(Product typeListOf)
      {          
        var query = (from c in Vt.Types select c);
        typeListOf.typeList=new List<Type>(query.ToList());
        return typeListof;
      }
    }

我的数据表

    Type : TypeId, TypeName
    TradeMark : TradeMarkId,TradeMarkName
    TProduct : ProductId,ProductName,TId,TMId//TId relation with TypeId, TMId relation with TradeMarkId

我无法解决这个问题,你能帮我吗?谢谢。


你的模型有点奇怪... 你是如何创建数据库的?你必须支持已经存在的数据库,还是自己创建它? - Dmytro
我创建了数据库。这是错误的吗? - sedat
不,这并没有错,但我认为你的模型是错误的。如果我理解正确的话... 你有这样的对象:产品、商标和产品类型。一个产品有一个商标,以及多个类型。例如,一款aSer笔记本电脑具有“aSer”商标,并属于计算机技术、办公室技术、技术、笔记本电脑等产品类型。我说得对吗? - Dmytro
是的,aSer是商标,计算机是类型,aSer计算机是Tproduct表记录。我的模型可能有误,但我想在一个模型中使用数据库中的多个表字段。我不能在一个模型中只使用一个表。例如,我不能使用@model TradeMark,因为在我的视图中我使用商标名称、产品名称和类型名称。 - sedat
3个回答

1

您可以查看期望的 Product 类型对象列表,如 (@model IEnumerable<Product>)。

尝试使用类似以下的代码:

return View(new List<Product> { product, product2 })

谢谢,但是有一个地方我不太明白。return View(product); product已经是一个列表了(我想),对吗?我的列表(也就是product)来自数据库。那么我如何在return view中创建一个新的列表呢? - sedat
你的视图是强类型的(你使用了@model来实现)。如果你想让你的视图接受一个产品,只需删除IEnumerable,使用@model Product即可。 - Aleksej Vasinov

0

我相信你需要创建一个类似这样的接口:

public interface IProduct
{
    IEnumerable<Product> Products { get; }
}

将您的控制器更改为使用此IEnumerable接口,而不是Product类。


0
在您的视图中,您已经声明了@model IEnumerable,这意味着此视图是强类型化为Product类型的枚举,并且您的视图将始终期望Product类型的枚举。您在此处遇到的错误是因为您正在传递单个Product对象,它与View的类型不匹配。
如果您想坚持使用IEnumerable,您可能需要在控制器或TypeListOf()方法中创建一个产品列表,并将其传递给View。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接