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

模型日期属性String转DateTime异常:AJAX传参控制器得默认日期

解决AJAX传递DateTime到MVC控制器时默认日期的问题

问题根源

前端原始日期字符串格式不符合JavaScript Date构造函数的解析规则,导致生成无效Date对象,传递到控制器后模型绑定失败,最终得到DateTime的默认值01-01-0001 00:00:00。

具体解决方法

1. 手动解析日期字符串,生成有效Date对象并转成ISO格式传递

如果你的原始MDate是固定格式(比如yyyy-MM-dd),手动拆分日期部分构造Date对象,再转成MVC模型绑定能识别的ISO格式字符串:

// 假设原始MDate为"2024-05-20"格式
const dateSegments = MDate.split('-');
// 注意JavaScript的月份是0索引(0=1月,11=12月)
const validDate = new Date(dateSegments[0], dateSegments[1] - 1, dateSegments[2]);

var dataParams = {                    
    MDate: validDate.toISOString(), // 转成ISO格式字符串,如"2024-05-20T00:00:00.000Z"
    Status: "hh",
    CountryID: 8
};

2. 直接传递符合MVC绑定规则的日期字符串

如果能保证原始MDate字符串是MVC默认支持的格式(比如yyyy-MM-dd、MM/dd/yyyy,取决于服务器区域设置),可以直接传递字符串,不需要转成Date对象:

var dataParams = {                    
    MDate: MDate, // 确保格式为"2024-05-20"或服务器支持的格式
    Status: "hh",
    CountryID: 8
};

3. 改用POST请求传递JSON数据(更可靠)

GET请求的URL参数容易出现格式编码问题,改用POST请求并传递JSON格式数据,模型绑定成功率更高:

const dateSegments = MDate.split('-');
const validDate = new Date(dateSegments[0], dateSegments[1] - 1, dateSegments[2]);

var dataParams = {                    
    MDate: validDate.toISOString(),
    Status: "hh",
    CountryID: 8
};

$.ajax({
    url: '../Monitoring/ActionGrid',
    type: 'POST', // 改为POST请求
    async: false,
    contentType: "application/json", // 指定请求内容类型为JSON
    data: JSON.stringify(dataParams), // 将对象转为JSON字符串
    cache: false, // POST请求无需缓存设置
    headers: {
        'Cache-Control': 'no-cache, no-store, must-revalidate',
        'Pragma': 'no-cache',
        'Expires': '0'
    },
    success: function (dataResponse) {
        // 处理成功响应
    }, 
    error: function (data) {
        // 处理错误
    }
});

同时修改控制器方法,添加[HttpPost]特性:

[HttpPost]
public JsonResult ActionGrid(ActionEntity actionEntity)
{
    // 业务逻辑处理
}

4. 可选:修改模型的DateTime为可空类型

将模型中的MDate改为可空类型,便于排查无效日期传递的情况:

public class ActionEntity
{        
    public string CountryID { get; set; }        
    public string Status { get; set; }        
    public DateTime? MDate { get; set; } // 改为可空类型
}

额外注意点

  • 前端AJAX配置中,原代码的datatype: "application/json"是错误的,正确的参数是contentType: "application/json"(指定请求的内容类型),dataType是预期的响应类型(比如"html"或"json")。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:06:12