ASP.NET MVC:如何将视图中的日期字符串传递至控制器?
如何在ASP.NET MVC中把FullCalendar的dayClick日期传递到控制器?
我来帮你搞定这个问题,核心就是通过前端请求把选中的日期传递给后端控制器,下面给你两种实用的实现方式:
方式一:AJAX异步提交(推荐,无页面刷新)
先修改视图里的dayClick方法,加入AJAX请求把格式化后的日期发送到控制器:
$('#calendar').fullCalendar({ dayClick: function(date) { // 把日期格式化为后端易解析的格式,比如'YYYY-MM-DD' const selectedDate = date.format('YYYY-MM-DD'); console.log(selectedDate); // 发送POST请求到控制器 $.ajax({ url: '/你的控制器名称/Booking', // 替换成实际路径,比如'/Booking/Booking' type: 'POST', contentType: 'application/json', data: JSON.stringify({ test: selectedDate }), // 键名要和控制器参数名一致 success: function(response) { console.log('日期已成功提交到控制器'); }, error: function(xhr, status, error) { console.error('提交失败:', error); } }); } })
然后调整控制器代码,建议直接接收DateTime类型(比string更规范):
[HttpPost] public IActionResult Booking(DateTime test) { var booking = new Booking(); booking.Date = test; // 直接赋值给DateTime属性 Console.WriteLine($"收到的日期: {test:yyyy-MM-dd}"); // 继续你的业务逻辑,比如保存到数据库、构建视图模型等 var viewModel = new BookingsideViewModel { /* 补全视图模型内容 */ }; // 返回JSON响应告知前端处理结果 return Json(new { success = true, message = "日期处理完成" }); }
方式二:表单提交(适合需要页面跳转的场景)
如果需要提交后刷新页面或跳转,可以用隐藏表单的方式:
先在视图里添加一个隐藏表单:
<form id="dateSubmitForm" action="/你的控制器名称/Booking" method="post"> <input type="hidden" id="hiddenDate" name="test" /> </form>
再修改dayClick方法,设置隐藏字段值并提交表单:
$('#calendar').fullCalendar({ dayClick: function(date) { const selectedDate = date.format('YYYY-MM-DD'); $('#hiddenDate').val(selectedDate); $('#dateSubmitForm').submit(); } })
控制器代码和方式一保持一致即可。
注意事项
- 务必替换AJAX或表单中的
url路径,确保指向你的控制器Booking方法,比如控制器是HomeController,路径就是/Home/Booking;如果有区域(Area),要加上区域路径,比如/Admin/Booking/Booking - 确保页面已引入jQuery,FullCalendar和AJAX都依赖它
- 日期格式尽量统一(比如
YYYY-MM-DD),避免后端解析时出现格式错误
内容的提问来源于stack exchange,提问作者Boris Grunwald
相关产品推荐
相关产品推荐

