2011-09-19 43 views
0

嘗試渲染集合,並以靜默方式無法輸出任何內容。我在SO上搜索類似的問題,並沒有發現任何描述我的問題。在Razor模板中迭代模型無法渲染

我絕對肯定收集不是空的。在控制器和視圖中進行調試將顯示我設置的類型集合中的項目。

我試過這些方法,並且都沒有提供任何東西。

@foreach (var item in Model.Messages) 
{ 
    @Html.DisplayFor(msg => item.MessageBody) 
} 

@foreach (var item in Model.Messages) 
{ 
    @Html.Display(item.MessageBody) 
} 

這使得該值按照預期

@foreach (var item in Model.Messages) 
{ 
    @item.MessageBody 
} 

有什麼問題嗎?

+0

有有些錯誤或不? –

+0

@AdamTuliper沒有錯誤,因爲助手似乎失去了範圍或一些這樣的,是'空'。取決於發生的事情和地點,收集總是有數據。這就是爲什麼我很困惑。爲什麼最初空了呢?我不知道,只是強迫它在控制器中列出似乎已經使數據「堅持」,因爲它應該。 – ZombieThread

回答

0

怪異,工作完全正常,我:

型號:

public class MyViewModel 
{ 
    public IEnumerable<Message> Messages { get; set; } 
} 

public class Message 
{ 
    public string MessageBody { get; set; } 
} 

控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new MyViewModel 
     { 
      Messages = Enumerable.Range(1, 10).Select(x => new Message 
      { 
       MessageBody = "message " + x 
      }) 
     }); 
    } 
} 

查看:

@model MyViewModel 

@foreach (var item in Model.Messages) 
{ 
    <div>@Html.DisplayFor(msg => item.MessageBody)</div> 
} 

我懷疑你Messages收集離子是空的或什麼的。想不到另一個理性的解釋,因爲我無法重現您的問題,如我的答案中所示。

作爲一個便箋,我會使用顯示模板來避免寫入任何循環。所以,你的Index.cshtml觀點簡直變成:

@model MyViewModel 

@Html.DisplayFor(x => x.Messages) 

,然後你寫它西港島線自動被渲染爲Messages收集您的視圖模型的每個項目對應的顯示模板(~/Views/Shared/DisplayTemplates/Message.cshtml):

@model Message 

<div>@Html.DisplayFor(x => x.MessageBody)</div> 
+0

你好Darin,謝謝你的快速反應。收藏絕對不是空的,正如我在我的原始帖子中所述。這是一個試用mvc 3和剃鬚刀的測試。我喜歡展示模板的想法,thx。 – ZombieThread

+0

@ ZombieThread,你試過我的回答嗎?看到它的作品?我不知道什麼可能會導致你不工作。發佈一個完整的示例,允許我們重現該問題。用同樣的方法我貼一個完整的和工作例如允許以表明這其實應該工作。 –

+0

我不能寫我願在這裏由於長度(不是長在所有的評論。所謂界面極其不友好,我想寄我發現的解決方案,是不允許的。試圖在這裏做的評論並不允許的。代碼的入口也是困難的,如果有一個以上的幾句話。爲什麼不使用BB代碼或一些正常工作?空白?這是Python的?:-) 讓我再試試添加一個secomd評論。 – ZombieThread