传递到字典中的模型项的类型为'System.Data.Linq.DataQuery`1 [Models.MailListViewModel]'

时间:2010-08-24 08:03:59

标签: linq-to-sql model-view-controller

我收到错误说:

  

传递到字典中的模型项的类型为'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>
    <% } %>

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

我该怎么办?

1 个答案:

答案 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类型,因此它将似乎没有任何属性存在。