MVC强类型对GetEnumerator()的View访问

时间:2010-08-06 04:55:43

标签: asp.net-mvc-2

我是MVC的新手,我正在寻找处理以下类的Enumerator访问的最佳方法:

 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循环中访问Enumerator?或者我是否需要创建一个容器类,将我的TemplateCollection公开为属性并访问该视图ViewDate [“TemplateCollection”]?

谢谢,

2 个答案:

答案 0 :(得分:1)

您实际上不需要定义新的集合类型类来用作模型。你可以简单地使用:

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

但在这两种情况下,您必须使用Model属性而不是ViewData属性 像这样:

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

OB的。不要使用IEnumerable<TemplateCollection>或它与IEnumerable<IEnumerable<Template>>相同,我认为这不是你想要的。

答案 1 :(得分:0)

其实非常简单:

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