You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Razor Pages中实现ASP.NET DataList的水平2列布局效果

Razor Page 实现2列自动换行水平布局方案

当然可以实现,和旧版ASP.NET的DataList水平填充效果一致,推荐两种常用实现方式:

方案1:CSS Grid实现(推荐)

不需要修改循环逻辑,仅通过样式控制布局,灵活性最高,后续调整列数仅需修改CSS参数即可。

样式代码

/* 可写在页面<style>标签或全局样式文件中 */
.two-col-container {
  display: grid;
  /* 2为列数,可按需调整为3、4等数值 */
  grid-template-columns: repeat(2, 1fr);
  /* 列与行之间的间距 */
  gap: 1rem;
}
.record-card {
  border: 1px solid #e5e7eb;
  padding: 1rem;
  text-align: center;
}
.grow {
  max-width: 100%;
  height: auto;
}

Razor页面代码

<div class="two-col-container">
@foreach (var x in Model.records)
{
    <div class="record-card">
        <div>@x.AccessDate</div>
        <div>@x.AccessLocationName</div>
        <div>
            <img src="@x.imagepath" class="grow" alt="访问记录图片" />
        </div>
    </div>
}
</div>

方案2:Razor分组渲染(适配表格场景)

如果需要保留表格布局,可以先将数据源按每2条分为一组,逐行渲染每组数据,和旧版DataList的实现逻辑一致。

Razor页面代码

@{
    // 按每2条记录为一组拆分数据源
    var recordGroups = Model.records
        .Select((item, index) => new { Item = item, Index = index })
        .GroupBy(x => x.Index / 2)
        .Select(g => g.Select(x => x.Item).ToList());
}

<table class="w-full border-collapse">
@foreach (var group in recordGroups)
{
    <tr class="border text-center">
        @foreach (var x in group)
        {
            <td class="border p-2">
                <div>@x.AccessDate</div>
                <div>@x.AccessLocationName</div>
                <div>
                    <img src="@x.imagepath" class="grow" alt="访问记录图片" />
                </div>
            </td>
        }
        <!-- 最后一组不足2条时补空单元格,保持表格结构整齐 -->
        @if (group.Count < 2)
        {
            <td class="border p-2" colspan="@(2 - group.Count)">&nbsp;</td>
        }
    </tr>
}
</table>

内容的提问来源于stack exchange,提问作者JamesW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:06:02