2011-09-06 2 views
0

Pouvez-vous s'il vous plaît m'aider à comprendre quel est le problème avec la collection générique? Merci d'avance!ASP.Net MVC Problèmes de modèle

Erreur: L'élément de modèle passé dans le dictionnaire est de type 'System.Collections.Generic.List 1[DomainModel.Product]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [DomainModel.Entities.Product].

Modèle:

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; } 
     } 
    } 
} 

INTERFACE

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> 

Répondre

5

Le er ror message vous dit tout votre besoin de savoir;

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]'. 

Si vous regardez votre vue, vous pouvez voir

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

Le Inherits="System.Web.Mvc.ViewPage<IEnumerable<DomainModel.Entities.Product>>" est ce qui vous trébucher. Vous passez un IEnumerable de DomainModel.Product, mais vous attendez autre chose. C'est un peu étrange que vous ayez deux classes nommées de la même façon dans le même espace de noms, mais attention, vous devez vous assurer que vous utilisez la même classe, dans le même espace de noms dans le contrôleur et dans la vue.

Je vais essayer de changer votre point de vue de devenir

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

Ensuite, essayez de comprendre pourquoi vous avez deux classes de produit :)

+0

Tu es mon héros !! Merci, je me suis occupé de ça toute la matinée. Je travaille à travers un tutoriel dans un manuel et il semble que ce soit une erreur dans le livre. – Susan