代码之家  ›  专栏  ›  技术社区  ›  Ryan Shripat Simon_Weaver

使用局部视图呈现以逗号分隔的项集的最优雅方式是什么?

  •  3
  • Ryan Shripat Simon_Weaver  · 技术社区  · 17 年前

    我需要使用ASP.NET MVC中的部分视图以逗号分隔的格式呈现一个Person对象列表。我的问题是,当使用以下代码呈现时:

    <% foreach (var person in Model) { %>
        <%= Html.ActionLink<PersonController>(c => c.Edit(person.PersonID), Html.Encode(person.Name)) %>,&nbsp;
    <% } %>
    

    最后一项后面有一个逗号。没有最后一个逗号来呈现这个人列表,最优雅/最不愚蠢的方法是什么?

    到目前为止,我有两个选择,没有顺序,那就是:

    1. 使用javascript删除客户端的尾随逗号
    2. 在部分视图中使用代码而不是标记手动创建列表

    这两种选择都不吸引我-有什么想法吗?

    谢谢!

    4 回复  |  直到 17 年前
        1
  •  3
  •   spender    17 年前

    怎么样:

    <%=String.Join(
        ",",
        Model.Select(
            person=>
                Html
                .ActionLink<PersonController>(
                    c => c.Edit(person.PersonID), 
                    Html.Encode(person.Name)
                )
        )
        .ToArray()
    )%>
    

    (未经测试)

        2
  •  2
  •   Mehrdad Afshari    17 年前
    <% bool first = true;
       foreach (var person in Model) { 
         if (first) first = false; else Response.Write(","); %>
         <%= Html.ActionLink<PersonController>(c => c.Edit(person.PersonID), Html.Encode(person.Name)) %>
    <% } %>
    
        3
  •  1
  •   Robert Harvey    17 年前

    我认为,您必须使用传统的for循环迭代Persons集合,而不是foreach。这样,您就可以通过循环检测最后一次迭代,并避免最后一个逗号。

    <% { int count=Model.Persons.Count();
         for (int i=0; i< count; i++) { %>
         <%= Html.ActionLink<PersonController>(c => c.Edit(Persons[i].PersonID), Html.Encode(Persons[i].Name)) %>
         <% if (i < count) { Response.Write(","); } 
       } %>
    
        4
  •  1
  •   Joe Chung    17 年前

    使用Linq聚合连接逗号分隔的链接,而不附加尾随逗号。

    <%= Model.Select(person => Html.ActionLink<PersonController>(c => c.Edit(person.PersonID), Html.Encode(person.Name))
             .Aggregate((links, link) => links + ", " + link) %>