2013-08-05 68 views
0

我正在學習實體框架和MVC。實體框架如何傳遞數據來查看?

這是我的模型:

public class ChatLogContext : DbContext 
{ 
    public ChatLogContext() 
     : base("connString") 
    { 
    } 

    public DbSet<ChatLogs> ChatLogs { get; set; } 
} 

[Table("ChatLogs")] 
public class ChatLogs 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int ChatLogId { get; set; } 
    [Column("Message")] 
    public string Message { get; set; } 
    [Column("UserId")] 
    public int UserId { get; set; } 

} 

這是我的控制器代碼在這裏:

 public ActionResult Index() 
    { 

     using(var db = new ChatLogContext()) 
     { 
      var list = db.ChatLogs.Select(p => p.Message).SingleOrDefault(); 
      ViewBag.data = list; 
      return View(); 

     } 


    } 

我再訪問這些數據,鑑於這樣的:

@model Chat.Models.ChatLogs 
@Html.Raw(ViewBag.data) 

我可以訪問1記錄,如此處所示。

但我想了解如何從表ChatLogs與實體框架訪問所有記錄,並傳遞給使用Razor方法(foreach)查看,所以我可以格式化該數據(我不喜歡默認表VS生成)。我現在使用ViewBag的一行和一列,這是我來的最遠的地方。

我在Google上找不到一個能幫助我的大腦的例子。

幫助表示讚賞。 PS:使用純實體還是混合使用linq(linq to entities)會更好嗎?

+0

請解釋一下你所說的「PS:使用純實體還是混合使用linq(linq到實體)更好?」。 – Aron

+0

使用實體查詢或linq到實體? –

+0

對不起。我仍然不明白「查詢實體」和「Linq to Entity」的含義。也許你應該編輯你的問題來提供代碼中的每個例子。更好的是,開發一個關於程序員的新問題(因爲它聽起來像是關於代碼質量的問題)。 – Aron

回答

0

通常,索引操作用於顯示所有實體的網格(在本例中爲ChatLog s)。

Razor視圖引擎的要點之一是您可以輸入視圖。所以通常我會直接將數據傳遞給視圖,而不是使用ViewBag。

public ActionResult Index() 
{ 

    using(var db = new ChatLogContext()) 
    { 
     var list = db.ChatLogs.ToList(); 
     return View(list); 

    } 
} 

下一步是將視圖鍵入到IEnumerable<ChatLog>。 Visual Studio應該幫助你。然後你可以在ChatLogs上使用foreach

+0

我之前就是這樣試過的,它給了我一個錯誤:「傳入字典的模型項目類型爲'System.Collections.Generic.List'1 [System.String]',但是這個字典需要一個模型項目類型'System.Collections.Generic.IEnumerable'1 [Chat.Models.ChatLogs]'。「 所以我使它像這樣工作:http://pastebin.com/zdKFR0pZ ..但是因爲我改變視圖類型爲IEnumerable 我不能再使用強類型視圖。這例如不起作用:@ * Html.TextBoxFor(m => m.Message,new {id =「txtMsg」})* @這不是問題我可以使用TextBox,但仍然明白嗎?.. –

+0

我的壞...刪除了'Select(x => x.Message)',現在好的多態性應該可以工作。你不需要指定id。至於如何使用TextBoxFor的東西...如果你想有'雙向綁定'的行爲,它有點煩人。你需要引入一個interator,使用'@Model List '並使用'@ Html.TextBoxFor(x => x [i] .Message)'不好...但是我通常發現我從來不需要這個。由於對於大型數據集,我只需顯示(減少回發大小)http://stackoverflow.com/a/11261698/1808494。 – Aron

+0

我在問,因爲如果你不使用'@ Html.TextBoxFor(x => x。消息)'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''然後改變np。還有1個問題。我怎麼能將這些數據從控制器添加到mvc的textarea中?在webforms中很容易。謝謝 –