2011-09-06 144 views
0

你能幫我理解泛型集合有什麼問題嗎?提前致謝!ASP.Net MVC模型問題

錯誤:傳遞到字典中的模型項類型爲'System.Collections.Generic.List 1[DomainModel.Product]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [DomainModel.Entities.Product]'。

MODEL:

namespace DomainModel.Concrete 
{ 
    public class SqlProductsRepository : IProductsRepository 
    { 
     private Table<Product> productsTable; 

     public SqlProductsRepository(string connString) 
     { 
      productsTable = (new ProaductDataContext(connString)).GetTable<Product>(); 
     } 

     public IQueryable<Product> Products 
     { 
      get { return productsTable; } 
     } 
    } 
} 

接口

namespace DomainModel.Abstract 
{ 
    public interface IProductsRepository 
    { 
     IQueryable<Product> Products { get; } 
    } 
} 

VIEW

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/ViewMaster.Master" 
     Inherits="System.Web.Mvc.ViewPage<IEnumerable<DomainModel.Entities.Product>>" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
Products 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <% foreach (var product in Model) 
     { %> 
     <div class = "item"> 
     <h3> <%=product.Name%></h3> 
     <%= product.Description%> 
     <h4><%= product.Price.ToString("c")%></h4> 
     </div> 
     <%} %> 
</asp:Content> 

回答

5

急診室ror消息告訴你所有你需要知道的信息;

The model item passed into the dictionary is of type 
'System.Collections.Generic.List1[DomainModel.Product]', 
but this dictionary requires a model item of type 
'System.Collections.Generic.IEnumerable1[DomainModel.Entities.Product]'. 

如果你看一下你的觀點,你可以看到

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/ViewMaster.Master" 
     Inherits="System.Web.Mvc.ViewPage<IEnumerable<DomainModel.Entities.Product>>" %> 

Inherits="System.Web.Mvc.ViewPage<IEnumerable<DomainModel.Entities.Product>>"是什麼絆倒你。你正在傳遞一個IEnumerable的DomainModel.Product,但你期待別的東西。有一點很奇怪,你有兩個在同一個命名空間內命名相同的類,但是不用擔心,你需要確保你在控制器和視圖的同一個命名空間中使用同一個類。

所以我想嘗試改變你的看法,成爲

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/ViewMaster.Master" 
     Inherits="System.Web.Mvc.ViewPage<IEnumerable<DomainModel.Product>>" %> 

然後試圖弄清楚爲什麼你有兩個產品類別:)

+0

你是我的英雄!謝謝,我一整個早上都在忙着這個。我正在通過一本教科書中的教程,看起來這本書是一個錯誤。 – Susan