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

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结构不符合后台要求,可按以下步骤排查修复:

  1. 修正前端提交数据格式: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 + '%');
  }
});
  1. 修正后台参数接收逻辑: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:57:03