ASP.NET Web Forms中JS与C#数据传递及日期转换问题咨询
全流程调试方案
- 前端环节:打开浏览器F12开发者工具,切换到「网络」标签勾选「保留日志」,触发日历点击事件后找到对应POST请求,检查请求负载的参数结构、日期字段格式是否符合预期;再到「源代码」标签给Mockup.js中发起POST请求的代码行加断点,触发事件时检查提交的事件数组内容、moment对象转字符串的输出是否正确。
- 后端接口:在Visual Studio中给Test.aspx.cs的接口方法首行加断点,调试模式启动站点,前端触发请求后先检查
Request.InputStream或Request.Form中的原始请求内容,确认数据是否正常到达服务端,再检查参数绑定逻辑的类型匹配问题。 - 序列化环节:把前端提交的原始JSON字符串复制出来,在C#中手动调用Newtonsoft.Json反序列化为目标类型,查看是否抛出异常,确认字段名、数据类型是否和C#类定义完全匹配。
后台JArray为空问题修复
该问题90%以上由三类原因导致:参数名不匹配、日期格式不兼容、提交的JSON结构不符合后台要求,可按以下步骤排查修复:
- 修正前端提交数据格式:moment对象不能直接序列化提交,必须先转为标准格式字符串,禁止直接把moment对象放入请求参数:
// 错误写法 const postData = { eventi: calendarEvents }; // 事件中的start/end为moment对象,直接序列化会丢失字段 // 正确写法 const formatEvents = calendarEvents.map(item => ({ id: item.id, title: item.title, start: item.start.format('YYYY-MM-DD HH:mm:ss'), end: item.end.format('YYYY-MM-DD HH:mm:ss') })); $.ajax({ type: 'POST', url: 'Test.aspx/CalculatePTPerc', contentType: 'application/json; charset=utf-8', data: JSON.stringify({ eventi: formatEvents }), dataType: 'json', success: res => { $('#spanPTPerc').text(res.d + '%'); } });
- 修正后台参数接收逻辑:WebMethod的参数名必须和前端提交的参数key完全一致,如果直接用JArray作为参数不生效,可先接收字符串再手动反序列化:
[WebMethod] public static decimal CalculatePTPerc(string eventi) { // 配置日期格式兼容,解决C# DateTime和前端日期字符串的转换异常 var jsonSettings = new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd HH:mm:ss", DateTimeZoneHandling = DateTimeZoneHandling.Local }; JArray eventArr = JsonConvert.DeserializeObject<JArray>(eventi, jsonSettings); // 后续调用PTEvent计算占比逻辑 }
内容的提问来源于stack exchange,提问作者Nad
相关产品推荐
相关产品推荐

