我收到错误说:
传递到字典中的模型项的类型为'System.Data.Linq.DataQuery`1 [WebUI.Models.MailListViewModel]',但此字典需要类型为'WebUI.Models.MailListViewModel'的模型项。< / p>
这是在我的控制器中:
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>
<% } %>
错误消息似乎有冲突,说我正在使用正确的模型。
我该怎么办?
答案 0 :(得分:1)
您的查询为查询中的每个结果返回IQueryable<MailListViewModel>
,基本上为MailListViewModel
。您的观点只需要一个MailListViewModel
。
您应该将视图更新为IEnumerable<MailListViewModel>
,如下所示:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<System.Collections.Generic.IEnumerable<WebUI.Models.MailListViewModel>>" %>
此外,完成后,您不应将Model
强制转换为IEnumerable
,因为这会导致枚举中的每个项目都被视为object
类型,因此它将似乎没有任何属性存在。