c# - 在 ASP.Net MVC 中的 X 个项目之后水平重复项目

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

我有一个菜单的部分 View ,它呈现这样的菜单;

@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>

最佳答案

这是一个IEnumerable<T>采用 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>

关于c# - 在 ASP.Net MVC 中的 X 个项目之后水平重复项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21502517/

相关文章:

c# - 如何在我的 XAML 代码中设置默认的 ComboBox 选择?

javascript - 提示文件下载

c# - HTTP POST 通过 C#

css - 多列在使用 ASP.NET 的 IE11 中不起作用

asp.net - Visual Studio 始终打开网站而不是编辑器的网页

.Net 二进制反序列化运行时平台的故障检测/取证

c# - ShowDialog 不阻塞执行代码但阻塞 UI

c# - 如何在 WinRT 中将水印文本添加到位图中?

c# - 用于解析/修改 C# 源代码(并在之后进行编译)的库

c# - 检测页面是否在 iframe 中 - 服务器端