2010-08-24 66 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

相關問題