【问题标题】:Repeat Items Horizontally after X No of Items in ASP.Net MVC在 ASP.Net MVC 中的 X 个项目之后水平重复项目
【发布时间】:2014-02-01 19:30:32
【问题描述】:

我有一个菜单的局部视图,它呈现这样的菜单;

@helper RenderNav(CategoryViewModel item)
{

    if (item.ChildCategories.Any())
    {
        <div class="link-block">
            <ul>
                @foreach (var sub in item.ChildCategories)
                {
                    <li><a href="#"><i class="icon-angle-right"></i> @sub.Name</a></li>
                    @RenderNav(sub);
                }
            </ul>
        </div>


    }
}
@foreach (var item in Model)
{
    <li>
        <a href="#" class="label">@item.Name<i class="icon-chevron-down"></i></a>
        <ul class="one" id="links">
            <li>
                @RenderNav(item)
            </li>
        </ul>
    </li>
}


但是,生成的 HTML 总是连续重复,但我想在修复后将项目移动到下一个列,例如 3 个项目,以便重新显示的项目应该像这样显示;

    <div class="link-block">
                <ul>               
                     <li><a href="#"><i class="icon-angle-right"></i> Menu 1</a></li>
 <li><a href="#"><i class="icon-angle-right"></i> Menu 2</a></li>
 <li><a href="#"><i class="icon-angle-right"></i> Menu 3</a></li>
                </ul>
            </div>
    <div class="link-block">
                <ul>               
                          <li><a href="#"><i class="icon-angle-right"></i> Menu 4</a></li>
 <li><a href="#"><i class="icon-angle-right"></i> Menu 5</a></li>
 <li><a href="#"><i class="icon-angle-right"></i> Menu 6</a></li>
                </ul>
            </div>
    <div class="link-block">
                <ul>               
                            <li><a href="#"><i class="icon-angle-right"></i> Menu 7</a></li>
 <li><a href="#"><i class="icon-angle-right"></i> Menu 8</a></li>
 <li><a href="#"><i class="icon-angle-right"></i> Menu 9</a></li>
                </ul>
            </div>

但是,当前的输出是;

<div class="link-block">
    <ul>
        <li><a href="#"><i class="icon-angle-right"></i> Menu 1</a></li>
     <li><a href="#"><i class="icon-angle-right"></i> Menu 2</a></li>
     <li><a href="#"><i class="icon-angle-right"></i> Menu 3</a></li>
     <li><a href="#"><i class="icon-angle-right"></i> Menu 4</a></li>
     <li><a href="#"><i class="icon-angle-right"></i> Menu 5</a></li>
     <li><a href="#"><i class="icon-angle-right"></i> Menu 6</a></li>
     <li><a href="#"><i class="icon-angle-right"></i> Menu 7</a></li>
     <li><a href="#"><i class="icon-angle-right"></i> Menu 8</a></li>
     <li><a href="#"><i class="icon-angle-right"></i> Menu 9</a></li>
    </ul>
</div>

【问题讨论】:

    标签: c# asp.net .net asp.net-mvc linq


    【解决方案1】:

    这是一个IEnumerable&lt;T&gt; 扩展方法,它接受source[A,B,C,D,E,F,G,H] 一样的groupSize 3 并返回[[A,B,C],[D,E,F],[G,H]]

    static IEnumerable<IEnumerable<T>> GroupSequential(
        this IEnumerable<T> source, int groupSize)
    {
        return source
            .Select((x, i) => new { x, i })
            .GroupBy(t => t.i / groupSize)
            .Select(g => g.Select(t => t.x));
    }
    

    现在,不要这样做:

    <ul>
    @foreach (var item in Model)
    {
        <li>...render item...</li>
    }
    </ul>
    

    这样做:

    <table>
    @foreach (var row in Model.GroupSequential(3))
    {
        <tr>
        @foreach (var item in row)
        {
            <td>...render item...</td>
        }
        </tr>
    }
    </table>
    

    【讨论】:

      猜你喜欢
      • 2011-08-12
      • 2016-01-22
      • 2017-03-27
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 1970-01-01
      • 2019-02-20
      • 2014-12-08
      相关资源
      最近更新 更多