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

创建事件后FullCalendar日历未更新问题咨询

解决FullCalendar创建事件后重定向不显示新事件的问题

嘿,这个坑我踩过好多次了!本质就是重定向后页面加载时,日历没拿到最新的事件数据——要么是缓存在搞鬼,要么是数据还没写完就跳走了。咱们一步步来搞定:

1. 先确认服务器端数据是否真正持久化

首先排查创建事件的后端代码,有没有确保数据完全写入数据库再重定向?比如异步方法没加await的话,重定向可能比数据库提交先完成,Index页面加载自然拿不到新数据:

// 错误示例:没加await,数据还没写库就跳走
public IActionResult CreateEvent(EventModel model)
{
    _dbContext.Events.Add(model);
    _dbContext.SaveChangesAsync(); // 这里少了await!
    return RedirectToAction("Index");
}

// 正确写法:一定要await确保数据写入完成
[HttpPost]
public async Task<IActionResult> CreateEvent(EventModel model)
{
    if (ModelState.IsValid)
    {
        _dbContext.Events.Add(model);
        await _dbContext.SaveChangesAsync(); // 关键:等待数据提交完成
        return RedirectToAction("Index");
    }
    return View(model);
}

2. 排查服务器端缓存问题

如果你的Index方法里用了缓存(比如MemoryCache、Redis)来获取事件数据,那创建事件后必须清空对应缓存,不然重定向后拿到的还是旧数据:

// 创建事件时同步清空缓存
await _dbContext.SaveChangesAsync();
_cache.Remove("CalendarEvents"); // 删掉缓存的事件列表

// Index方法里从数据库/缓存取数据
public async Task<IActionResult> Index()
{
    var events = _cache.Get<List<Event>>("CalendarEvents");
    if (events == null)
    {
        events = await _dbContext.Events.ToListAsync();
        _cache.Set("CalendarEvents", events, TimeSpan.FromMinutes(10));
    }
    return View(events);
}

3. 禁用前端AJAX请求的缓存

如果你的FullCalendar是通过AJAX拉取事件数据,浏览器可能会缓存GET请求的结果,导致重定向后拿到旧数据。给请求加个时间戳或者直接禁用缓存:

document.addEventListener('DOMContentLoaded', function() {
    const calendar = new FullCalendar.Calendar(document.getElementById('calendar'), {
        events: {
            url: '/Main/GetEvents',
            method: 'GET',
            cache: false, // 强制禁用缓存
            extraParams: function() {
                return {
                    _: Date.now() // 加时间戳,让每次请求都唯一,避免缓存
                };
            }
        },
        // 其他日历配置...
    });
    calendar.render();
});

4. 禁用页面级缓存

如果以上都没用,可能是浏览器缓存了整个Index页面。在Index方法里加响应头禁止页面缓存:

public IActionResult Index()
{
    // 告诉浏览器不要缓存这个页面
    Response.Headers["Cache-Control"] = "no-cache, no-store, must-revalidate";
    Response.Headers["Pragma"] = "no-cache";
    Response.Headers["Expires"] = "0";
    
    var events = await _dbContext.Events.ToListAsync();
    return View(events);
}

按这个顺序排查,90%的情况都是缓存或者异步没加await的问题——毕竟刷新后能显示,说明数据已经在数据库里了,只是页面加载时没拿到最新的而已~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:26:32