2010-08-06 72 views
1

我很新的MVC和視圖的類型時找的處理訪問下面的類的枚舉的最佳方式查看訪問:MVC強類型到的GetEnumerator()

public class TemplateCollection : IEnumerable<Template> 
    { 
     private IEnumerable<Template> templates; 

     public TemplateCollection() 
     { 
      LoadTemplates(); 
     } 

     public IEnumerator<Template> GetEnumerator() 
     { 
      return templates.GetEnumerator(); 
     } 

     IEnumerator IEnumerable.GetEnumerator() 
     { 
      return templates.GetEnumerator(); 
     } 
} 

我的觀點(或多或少):

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<TemplateCollection>" %> 
<asp:Content ContentPlaceHolderID="MainContent" runat="server"> 
      <%foreach(var template in ViewData ??) %> 
</asp:Content> 

如何訪問的枚舉在我的foreach循環?或者我是否需要創建一個容器類來公開我的TemplateCollection作爲屬性並訪問該視圖ViewDate [「TemplateCollection」]?

感謝,

回答

0

其實很簡單:

<%foreach (var template in Model) { } %> 
1

你並不真的需要定義一個新的集合型類作爲模型中使用。你可以簡單地使用:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<Template>>" %> 

但在這兩種情況下,你一定很喜歡這個,而不是使用的ViewData屬性 的模型屬性:

<asp:Content ContentPlaceHolderID="MainContent" runat="server"> 
      <%foreach(var template in Model) %> 
</asp:Content> 

觀測值。不要使用IEnumerable<TemplateCollection>或者它會和IEnumerable<IEnumerable<Template>>一樣,我不認爲這是你想要的。

+0

主席先生,我想您的解決方案將工作,但我TemplateCollection可能包含我需要訪問其他屬性。我不想只傳遞可作爲參數枚舉的「模板」。我同意可能難以從我的問題中辨別出來。 +1而不是我正在尋找的答案。 (但它是由Studio生成的視圖的默認設置。)謝謝 – andleer 2010-08-06 16:03:44

+0

此外,新集合的目的是充當許多屬性的頂級容器等。它不是簡單地完成從控制器傳遞來查看。 – andleer 2010-08-06 16:05:24

+0

沒問題。在這種情況下,您可以簡單地使用ViewPage 並通過Model屬性進行訪問,或者當TemplateCollection從IEnumerable