2011-05-07 48 views
1

我是ASP.NET MVC的新手,實際上這是我第一個使用它的項目。我想構建簡單的TaskList。我在ASP.NET中相當好,但對ASP.NET MVC或Linq幾乎一無所知,所以請在回答時記住這一點。如何在ASP.NET MVC3中創建此模型?

我使用CodeFirst實體Frameword生成Db。

我有兩個表用戶(id,name)和任務(id,userid,name)。我創建了兩個Model對象,分別保存用戶和任務屬性。所以,而不是有int用戶ID作爲數據庫設計會建議我有任務類內的用戶類連接任務到某些用戶。

不知何故,我已經成功地創建使用LINQ

var model = from t in _db.Tasks 
       join u in _db.Users on t.User.ID equals u.ID 
       select new { UserID = u.ID,UserName = u.Name,t.Name,t.ID }; 
    return View(model); 

加入,但我不能把它綁定到一個觀點,我綁定它的任務模型,可能導致此錯誤。

我該如何解決這個問題,也許有某種ViewModel我需要創建或類似的東西?

謝謝...

回答

1

您應該創建一個視圖模型,並把它傳遞到您的視圖:

public class TaskViewModel 
{ 
    public int TaskId { get; set; } 
    public string TaskName { get; set; } 
    public int UserId { get; set; } 
    public int Username { get; set; } 
} 

不是創建一個強類型的視圖:

@model IEnumerable<YourNamespace.Models.TaskViewModel> 
//Display model data 

和LINQ查詢:

var model = from t in _db.Tasks 
      join u in _db.Users on t.User.ID equals u.ID 
      select new TaskViewModel 
      { 
       TaskId = t.ID,      
       TaskName = t.Name, 
       UserId = u.ID, 
       Username = u.Name 
      }; 
1

您的Linq查詢使用了所謂的延遲執行。這意味着查詢本身不包含任何記錄,您必須對其執行任何操作才能執行。

那麼試試這個:

return View(model.ToList()); 
+0

@model IEnumerable ,任務不包含User.Name。我應該創建ViewModel嗎? – eugeneK 2011-05-07 15:30:23

+0

@eugeneK - 是的,您需要創建一個查詢返回的ViewModel,並讓View使用該VM。 – klabranche 2011-05-07 15:36:57

+0

是的,你必須創建一個視圖模型來組合這樣的數據。 – Gho5t 2011-05-07 15:36:58