【问题标题】:@foreach loop in MVC 3MVC 3 中的 @foreach 循环
【发布时间】:2012-02-15 17:33:21
【问题描述】:

我是 MVC 3 的新手,开始有这个问题,

我有一个类定义为

    Class abc 
    { public string Id { get; set; }
            public string str1 { get; set; }
            public string Action { get; set; }
            public string Name { get; set; }
            public string Title {get; set;}

    }

在我的 MVC2 aspx viewpage 上,我使用这个类 abc 作为模型并且有这个代码

 <%
   Model.ForEach(a => 
            { %>
               <%= Html.ActionLink(a.Title ,
                                   a.Action  ,   // <-- ActionMethod  
                                   a.Name  ,  // <-- Controller Name.      
                                   new { key = a.Id }, // <-- Route arguments.     
                                   new { title = a.str1 })%> 
                        <br /><br />        


                  <% }); %> 

你能帮我把这段代码转换成 MVC razor view 吗? @model abc

 <%
            Model.ForEach(a => 
            { %>
               <%= Html.ActionLink(a.Title ,
                                   a.Action  ,   // <-- ActionMethod  
                                   a.Name  ,  // <-- Controller Name.      
                                   new { key = a.Id }, // <-- Route arguments.     
                                   new { title = a.str1 })%> 
                        <br /><br />        


                  <% }); %> 

当我尝试使用 @foreach(模型中的 var abc)时,我收到错误消息,需要实现 Ienumerable 吗?如何使用@for 实现请帮助或给我指点。谢谢

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    模型只显示一个对象,而不是对象列表。 因此,您不应该使用 ForEach 而是直接访问属性而不使用循环作为 Model.Name 等。 如果您想要一个对象列表,那么您需要更新您的控制器以使用通用列表返回这些对象的列表。

    var abcCollection = new List<abc>();
    

    这应该为您指明正确的方向。

    【讨论】:

      【解决方案2】:

      用户1005310,

      稍微了解一下 Razor 语法会有所帮助。谷歌先生有很多例子。但是,如果您有大量代码要转换,那么您有一个很棒的小“工具”可以提供帮助(现在是 OSS,最初由 Telerik 开发)。看看:

      https://github.com/telerik/razor-converter

      这基本上是一个转换器,它采用一整套 aspx 视图并将它们转换为 Razor。我现在已经在几个测试项目中尝试过它,它的效果达到了我 99% 的满意度,另外 1% 正在得到解决(或者我可以接受细微的调整)。

      【讨论】:

        【解决方案3】:

        我建议您使用显示模板。这样您就不需要编写任何循环。所以:

        @model IEnumerable<abc>
        @Html.DisplayForModel()
        

        然后您定义一个显示模板,该模板将为模型集合的每个元素自动呈现 (~/Views/Shared/DisplayTemplates/abc.cshtml):

        @model abc
        @Html.ActionLink(
            Model.Title,
            Model.Action,
            Model.Name,
            new { key = Model.Id },
            new { title = Model.str1 }
        )
        <br /><br />        
        

        请注意,模板按约定工作。它们必须放置在~/Views/Shared/DisplayTemplates 文件夹或~/Views/SomeController/DisplayTemplates 文件夹中,具体取决于您是要在来自多个控制器或单个控制器的视图之间重用它们。 ASP.NET MVC 首先在特定文件夹中查找模板,然后在共享文件夹中查找。文件名也很重要。在这种情况下,您的模型由IEnumerable&lt;abc&gt; 组成,其中abc 是此集合中元素的类型,因此显示模板必须称为abc.html

        相同的规则适用于编辑器模板。只需将display 替换为editor。顾名思义,编辑器模板适合放置输入字段以编辑视图模型。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多