.NET Framework项目Ajax请求控制器接收空值问题求助
问题排查与解决步骤
1. 修复客户端对象构造错误
你在构建myNewModel时错误地用对象包裹了属性值(比如{ codigoInterno }),生成了嵌套结构,和服务端模型不匹配。应直接赋值:
var myNewModel = { "CodigoInterno": codigoInterno, "AreaFuncional": areaFuncional, "Nombre": nombre, "Descripcion": descripcion, "Estado": "En desarrollo", "Tipo": tipo, "Responsable": usuario, "Importado": importado, "FechaCreacion": getCurrentDateTime() }
2. 移除重复的JSON序列化
当前对myNewModel做了两次序列化(先JSON.stringify再在ajax的data里重复调用),导致数据变成转义后的无效字符串。修正ajax代码:
var modelJson = JSON.stringify(myNewModel); $.ajax({ type: "POST", url: '@Url.Action("CreateNewModel", "Modelos")', data: modelJson, contentType: 'application/json', dataType : "json" }).done(function () { window.alert("success"); });
3. 修改控制器参数绑定方式
方案A:直接用模型类自动绑定(推荐)
把控制器参数改成ModelToImport并添加[FromBody]特性,让MVC自动解析请求体JSON:
[HttpPost] public ActionResult CreateNewModel([FromBody] ModelToImport model) { if (model != null && ModelState.IsValid) { Modelo modelo = new Modelo { CodigoInterno = model.CodigoInterno, AreaFuncional = model.AreaFuncional, Nombre = model.Nombre, Descripcion = model.Descripcion, Estado = model.Estado, Tipo = model.Tipo, Responsable = model.Responsable, Importado = model.Importado, FechaCreacion = model.FechaCreacion }; db.Modelo.Add(modelo); db.SaveChanges(); return RedirectToAction("Index"); } return View(); }
方案B:接收字符串并手动反序列化
若坚持用字符串参数,必须加[FromBody],否则.NET Framework MVC不会从请求体读取字符串:
[HttpPost] public ActionResult CreateNewModel([FromBody] string model) { if (!string.IsNullOrEmpty(model)) { ModelToImport importModel = JsonConvert.DeserializeObject<ModelToImport>(model); // 后续逻辑同上 } return RedirectToAction("Index"); }
4. 验证日期格式
确保getCurrentDateTime()返回ISO 8601标准的日期字符串(如"2024-05-20T12:34:56"),否则MVC无法正确解析为DateTime类型。
额外检查
- 打开浏览器开发者工具(F12)的网络标签,查看请求Payload,确认JSON结构无嵌套或转义错误。
- 检查模型类属性名称与客户端JSON的一致性(MVC默认大小写不敏感,但保持一致可避免潜在问题)。
内容的提问来源于stack exchange,提问作者Luis Bauer
相关产品推荐
相关产品推荐

