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

基于C#为ASP嵌套Repeater添加日期的技术咨询

看起来你已经把日历的基础框架搭得相当扎实了!要给嵌套Repeater加上具体的日期信息,咱们可以从数据源构建和Repeater绑定这两块入手,下面是具体的实现步骤:

为嵌套Repeater添加日期信息的实现方案

1. 构建包含完整日期的数据源

首先,咱们需要生成每个月份的具体日期集合(而不是单纯的天数数组),可以先定义一个简单的模型类来存储月份和对应的日期列表:

// 自定义模型,用来封装月份名称和该月的所有日期
public class MonthCalendarData
{
    public string MonthDisplayName { get; set; }
    public List<DateTime> DailyDates { get; set; }
}

// 在后台生成全年的日历数据
List<MonthCalendarData> yearCalendar = new List<MonthCalendarData>();
int targetYear = DateTime.Now.Year; // 可替换为指定年份

for (int month = 1; month <= 12; month++)
{
    DateTime firstDayOfMonth = new DateTime(targetYear, month, 1);
    DateTime lastDayOfMonth = firstDayOfMonth.AddMonths(1).AddDays(-1);
    
    // 生成当前月份的所有日期
    List<DateTime> monthDates = new List<DateTime>();
    for (DateTime currentDate = firstDayOfMonth; currentDate <= lastDayOfMonth; currentDate = currentDate.AddDays(1))
    {
        monthDates.Add(currentDate);
    }
    
    // 将月份数据加入集合
    yearCalendar.Add(new MonthCalendarData
    {
        MonthDisplayName = firstDayOfMonth.ToString("MMMM"), // 显示完整月份名,比如"February"
        DailyDates = monthDates
    });
}

// 绑定外层Repeater
outerRepeater.DataSource = yearCalendar;
outerRepeater.DataBind();

2. 修改Repeater的前端绑定与后台逻辑

外层Repeater前端代码

在外层Repeater的ItemTemplate中,除了展示月份名称,还要把当前月份的日期列表绑定给内层Repeater:

<asp:Repeater ID="outerRepeater" runat="server" OnItemDataBound="outerRepeater_ItemDataBound">
    <ItemTemplate>
        <tr>
            <!-- 显示月份名称 -->
            <td class="month-header"><%# Eval("MonthDisplayName") %></td>
            <!-- 内层Repeater渲染每日日期 -->
            <asp:Repeater ID="innerRepeater" runat="server">
                <ItemTemplate>
                    <td 
                        <%# ((DateTime)Eval(".")).DayOfWeek == DayOfWeek.Saturday || ((DateTime)Eval(".")).DayOfWeek == DayOfWeek.Sunday 
                            ? "style='background-color: #f0f0f0;'" 
                            : "" %>
                    >
                        <!-- 显示日期的天数字段,也可以改成完整日期格式 -->
                        <%# ((DateTime)Eval(".")).Day %>
                    </td>
                </ItemTemplate>
            </asp:Repeater>
        </tr>
    </ItemTemplate>
</asp:Repeater>

后台绑定内层Repeater

在外层Repeater的ItemDataBound事件中,获取当前月份的日期列表,绑定给内层Repeater:

protected void outerRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    // 只处理数据项和交替项
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        MonthCalendarData currentMonth = (MonthCalendarData)e.Item.DataItem;
        Repeater innerRepeater = (Repeater)e.Item.FindControl("innerRepeater");
        
        // 绑定当前月份的所有日期
        innerRepeater.DataSource = currentMonth.DailyDates;
        innerRepeater.DataBind();
    }
}

3. 可选优化:显示完整日期

如果需要展示完整的日期(比如2024-03-15),直接修改内层Repeater的绑定表达式即可:

<td 
    <%# ((DateTime)Eval(".")).DayOfWeek is DayOfWeek.Saturday or DayOfWeek.Sunday 
        ? "style='background-color: #f0f0f0;'" 
        : "" %>
>
    <%# ((DateTime)Eval(".")).ToString("yyyy-MM-dd") %>
</td>

这样调整后,你的嵌套Repeater就能完美展示每个月份的具体日期,同时保留周末背景色高亮的功能啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:19:27