fullCalendar日历控件官方网址: https://fullcalendar.io/
1.需要引入的文件
1 2 3 4 5 6 | <link href= "~/assets/fullcalendar-3.9.0/fullcalendar.min.css" rel= "stylesheet" /> <link href= "~/assets/fullcalendar-3.9.0/fullcalendar.print.min.css" rel= "stylesheet" media= "print" /> <script src= "~/assets/fullcalendar-3.9.0/lib/moment.min.js" ></script> @*<script src= "~/assets/fullcalendar-3.9.0/lib/jquery.min.js" ></script>*@ <script src= "~/assets/fullcalendar-3.9.0/fullcalendar.min.js" ></script> <script src= "~/assets/fullcalendar-3.9.0/locale/zh-cn.js" ></script> |
2.HTML页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | <style> html, body { margin: 0; padding: 0; } #script-warning { display: none; background: #eee; border-bottom: 1px solid #ddd; padding: 0 10px; line-height: 40px; text-align: center; font-weight: bold; font-size: 12px; color: red; } #loading { display: none; position: absolute; top: 50%; right: 50%; } #calendar { max-width: 800px; margin: 0px auto; } </style> 校区: < select id= "XiaoQu" name= "XiaoQu" > <option value= "18" >锦江校区</option> <option value= "19" >高新校区</option> </ select > <div id= "script-warning" >出错了</div> <div id= "loading" >加载中......</div> <div id= 'calendar' ></div> $(function () { $( '#calendar' ).fullCalendar({ header: { left: 'prev,next today' , center: 'title' , right: 'month,basicWeek,basicDay,listWeek' }, defaultView: 'month' , defaultDate: '@showDate.ToString("yyyy-MM-dd")' , //默认显示的日期 locale: 'zh-cn' , events: { url: '@Url.Action("JsonData")' , //获取json数据的url data: function () { // a function that returns an object return { place: $( "#XiaoQu" ).val() //额外的动态参数 }; }, error: function () { $( '#script-warning' ).show(); } }, loading: function ( bool ) { $( '#loading' ).toggle( bool ); } }); $( "#XiaoQu" ).change(function () { $( '#calendar' ).fullCalendar( 'refetchEvents' ); //重新加载数据 }); }); |
3.生成Json数据的后台
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public async Task<String> JsonData(DateTime start, DateTime end, int place) { var list = await _context.RoomConfigure.Where(g =>g.PlaceID==place &g.StartTime.Date.CompareTo(start) > 0 & g.StartTime.Date.CompareTo(end) < 0).ToListAsync(); StringBuilder resultStr = new StringBuilder(); resultStr.Append( "[" ); foreach ( var item in list) { resultStr.Append( "{" ); resultStr.Append( "\"title\": \"可预约" + item.Number + "\"," ); resultStr.Append( "\"start\": \"" + item.StartTime.ToString( "yyyy-MM-ddTHH:mm:sszzzz" , System.Globalization.DateTimeFormatInfo.InvariantInfo) + "\"," ); resultStr.Append( "\"allDay\": false" ); resultStr.Append( "}," ); } if (list.Count > 0) { resultStr.Remove(resultStr.Length - 1, 1); } resultStr.Append( "]" ); string jsonStr = "[{\"title\":\"All Day Event\",\"start\":\"2018-03-01\"},{\"title\":\"Long Event\",\"start\":\"2018-03-07\",\"end\":\"2018-03-10\"},{\"id\":\"999\",\"title\":\"Repeating Event\",\"start\":\"2018-03-09T16:00:00-05:00\"},{\"id\":\"999\",\"title\":\"Repeating Event\",\"start\":\"2018-03-16T16:00:00-05:00\"},{\"title\":\"Conference\",\"start\":\"2018-03-11\",\"end\":\"2018-03-13\"},{\"title\":\"Meeting\",\"start\":\"2018-03-12T10:30:00-05:00\",\"end\":\"2018-03-12T12:30:00-05:00\"},{\"title\":\"Lunch\",\"start\":\"2018-03-12T12:00:00-05:00\"},{\"title\":\"Meeting\",\"start\":\"2018-03-12T14:30:00-05:00\"},{\"title\":\"Happy Hour\",\"start\":\"2018-03-12T17:30:00-05:00\"},{\"title\":\"Dinner\",\"start\":\"2018-03-12T20:00:00\"},{\"title\":\"Birthday Party\",\"start\":\"2018-03-13T07:00:00-05:00\"},{\"title\":\"Click for Google\",\"url\":\"http://google.com/\",\"start\":\"2018-03-28\"}]" ; //return jsonStr; return resultStr.ToString(); } |
4.官方的Json数据源格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | [ { "title" : "All Day Event" , "start" : "2018-03-01" }, { "title" : "Long Event" , "start" : "2018-03-07" , "end" : "2018-03-10" }, { "id" : "999" , "title" : "Repeating Event" , "start" : "2018-03-09T16:00:00-05:00" }, { "id" : "999" , "title" : "Repeating Event" , "start" : "2018-03-16T16:00:00-05:00" }, { "title" : "Conference" , "start" : "2018-03-11" , "end" : "2018-03-13" }, { "title" : "Meeting" , "start" : "2018-03-12T10:30:00-05:00" , "end" : "2018-03-12T12:30:00-05:00" }, { "title" : "Lunch" , "start" : "2018-03-12T12:00:00-05:00" }, { "title" : "Meeting" , "start" : "2018-03-12T14:30:00-05:00" }, { "title" : "Happy Hour" , "start" : "2018-03-12T17:30:00-05:00" }, { "title" : "Dinner" , "start" : "2018-03-12T20:00:00" }, { "title" : "Birthday Party" , "start" : "2018-03-13T07:00:00-05:00" }, { "title" : "Click for Google" , "url" : "http://google.com/" , "start" : "2018-03-28" } ] |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理