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

ASP.NET MVC Core中fullcalendar.io如何添加带叉号的事件删除选项

具体实现方案

1. 补充事件对象的自定义字段

你原来拉取后端数据组装日历事件的时候,要把删除需要的加密ID单独存到事件对象里,方便后续渲染和删除操作调用。修改$.each遍历mems的代码段:

$.each(mems, function (_, member) {
    events.push({
        title: member.guestname,
        start: new Date(member.checkindatetime),
        end: new Date(member.checkoutdatetime),
        allDay: true,
        url: '/Booking/Booking/' + member.encryptedId,
        className: member.classnamecolor,
        // 新增:存储删除操作需要的ID
        encryptedId: member.encryptedId
    });
});

2. 利用fullcalendar的渲染钩子注入删除叉号

在fullcalendar初始化配置里加eventRender回调,每个日历事件渲染完成时自动往DOM里插入叉号按钮,同时把事件ID绑定到按钮的data属性上:

$this.$calendarObj = $this.$calendar.fullCalendar({
    defaultView: 'month',  
    handleWindowResize: true,
    header: {
        left: 'prev,next today',
        center: 'title',
        right: ''
    },
    navLinks: false,
    events: events,
    // 新增事件渲染回调
    eventRender: function(event, element) {
        // 插入删除叉号,绑定事件ID
        element.append('<a href="javascript:;" class="fc-delete-event" data-id="'+event.encryptedId+'" title="删除预订" style="float:right;color:#fff;font-weight:bold;margin:0 3px;font-size:16px;line-height:1;cursor:pointer;opacity:0.9;">×</a>');
    }
});

如果要调整叉号样式,可以把内联样式抽到全局CSS里,加个hover效果体验更好:

.fc-delete-event:hover {
    opacity: 1 !important;
    transform: scale(1.15);
}

3. 绑定删除按钮的点击逻辑

因为删除按钮是动态渲染的,要用事件委托绑定点击事件,注意阻止事件冒泡,避免点叉号的时候触发原事件的跳转逻辑。在日历初始化完成后追加以下代码:

// 委托绑定删除事件
$this.$body.on('click', '.fc-delete-event', function(e) {
    // 阻止冒泡和默认行为,防止触发事件跳转
    e.stopPropagation();
    e.preventDefault();

    var deleteId = $(this).data('id');
    if(!confirm('确定要删除这条预订记录吗?')) return;

    // 请求后端删除接口
    $.post('/Booking/DeleteBooking', { id: deleteId }, function(res) {
        if(res.success) {
            // 删除成功后直接移除日历上的对应事件,不用整页刷新
            $this.$calendarObj.fullCalendar('removeEvents', function(ev) {
                return ev.encryptedId === deleteId;
            });
        } else {
            alert(res.msg || '删除失败,请重试');
        }
    }).fail(function() {
        alert('网络异常,请稍后重试');
    });
});

4. 补充后端删除接口

在你的BookingController里新增POST类型的删除接口,处理数据库删除逻辑,返回标准JSON结果:

[HttpPost]
public IActionResult DeleteBooking(string id)
{
    try
    {
        // 替换成你自己的业务逻辑:根据加密ID查询预订记录,执行删除
        // var booking = await _dbContext.Bookings.FirstOrDefaultAsync(b => b.EncryptedId == id);
        // if (booking == null) return Json(new { success = false, msg = "预订记录不存在" });
        // _dbContext.Bookings.Remove(booking);
        // await _dbContext.SaveChangesAsync();
        return Json(new { success = true });
    }
    catch (Exception ex)
    {
        return Json(new { success = false, msg = ex.Message });
    }
}

这样改完之后,所有日历事件右上角都会出现白色叉号,点击确认后就会调用接口删除对应记录,同时同步更新日历视图,不需要刷新页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:09:33