ASP.Net MVC模型问题

Sus*_*san 0 asp.net-mvc anonymous-types

你能帮我理解一下通用收藏的问题吗?提前致谢!

错误: 传递到字典中的模型项的类型为'System.Collections.Generic.List 1[DomainModel.Product]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1 [DomainModel.Entities.Product]'.

模型:

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; }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

接口

namespace DomainModel.Abstract
{
    public interface IProductsRepository
    {
        IQueryable<Product> Products { get; }
    }
}
Run Code Online (Sandbox Code Playgroud)

视图

<%@ 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>
Run Code Online (Sandbox Code Playgroud)

blo*_*art 5

错误消息告诉您所有需要知道的事情;

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]'.
Run Code Online (Sandbox Code Playgroud)

如果你看看你的视图,你可以看到

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

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>>" %>
Run Code Online (Sandbox Code Playgroud)

然后试着弄清楚为什么你有两个产品类:)