2010-08-24 54 views
0

我收到一个错误说:传递到字典的模型项的类型为“System.Data.Linq.DataQuery`1 [Models.MailListViewModel]”

传递到字典的模型产品类型'System.Data.Linq.DataQuery`1 [WebUI.Models.MailListViewModel]',但是这个字典需要一个类型为'WebUI.Models.MailListViewModel'的模型项。

这是在我的控制器:

public ViewResult List() 
    { var mailToShow = from m in mailRepository.Mail 
         join p in profilesRepository.Profiles on m.SenderId equals p.ProfileId 
         select new MailListViewModel 
            { 
             SenderId = m.SenderId, 
             ProfileId = p.ProfileId, 
             UserName = p.UserName, 
             Subject = m.Subject 
            }; 
     return View(mailToShow); 
    } 

这是我MailListViewModel:

public class MailListViewModel 
{   
    public int SenderId; 
    public int ProfileId; 
    public string UserName; 
    public string Subject; 
} 

这是我的看法:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<WebUI.Models.MailListViewModel>" %> 

<% foreach (var m in (IEnumerable)Model) 
     { %> 
    <tr> 
     <td> 
     </td> 
     <td>TODO image</td> 
     <td> 
     <%: Model.SenderId %></td> 

     <td><%: Model.Subject%></td> 
    </tr> 
    <% } %> 

错误消息似乎有冲突,说我正在使用正确的模式。

我该怎么办?

回答

1

您的查询返回的是IQueryable<MailListViewModel>,对于查询中的每个结果,本质上都是一个MailListViewModel。您的看法预计只有一个MailListViewModel。此外

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<System.Collections.Generic.IEnumerable<WebUI.Models.MailListViewModel>>" %> 

,一旦你做到了,你不应该投的ModelIEnumerable因为这将导致每个项目的枚举:

应当更新以期望IEnumerable<MailListViewModel>,像这样被视为object类型,因此它将显示为您的任何属性都不存在。

+0

很好,现在几乎在工作! 我更新了视图之后,我收到了以下消息: CS1061:'object'不包含'Subject'的定义,并且没有可以找到接受类型'object'的第一个参数的扩展方法'Subject'缺少using指令或程序集引用) ,他们强调: <%:m.Subject%> 智能感知说: 无法解析符号“主题” 我应该尝试下? – Castielle 2010-08-24 10:19:53

+0

如果您仍将模型转换为IEnumerable,则可能是这种情况。我相应地更新了我的答案。 – 2010-08-24 10:37:13

+0

Closer :)现在我收到一条错误消息: “查询包含对在不同数据上下文中定义的项目的引用。” 它指的是:“<%foreach(模型中的变量)” – Castielle 2010-08-24 10:51:58

相关问题