使用HTML+jQuery调用ASP.NET Core API提交数据到MSSQL参数为空如何解决
问题根因
- 前端传递的数据格式和声明的
contentType不匹配:你代码里valdata是$("#formData").serialize()生成的表单编码格式字符串,但ajax配置里声明的contentType是application/json,后端[FromBody]特性会按照JSON格式解析请求体,格式不匹配导致绑定失败,参数自然为null。 - 取表单值的时机错误:你在页面刚加载时就执行了
serialize()生成valdata,此时用户还没填写表单,拿到的本来就是空值;点击事件里明明拼接了最新的表单JSON对象formData,但完全没有用到。
修复方案
1. 前端jQuery代码修改
直接替换原有脚本为以下内容:
<script type="text/javascript"> $(document).ready(function () { $("#btnsubmit").click(function (e) { // 阻止表单默认提交行为 e.preventDefault(); // 点击提交时再获取最新表单数据 let formData = {}; $("#formData").serializeArray().map((x) => { formData[x.name] = x.value; }); $.ajax({ url: "https://localhost:44389/Register", contentType: "application/json; charset=utf-8", type: 'POST', dataType: 'json', // 把JSON对象转成JSON字符串传递,不要用原来的valdata data: JSON.stringify(formData), success: function (data) { alert(data); }, failure: function (data) { alert("Failure: " + data); }, error: function (data) { alert("Error: " + data); } }); }); }); </script>
2. 后端验证项
- 确认
CustmRegistration实体类的所有属性均为public修饰,且包含公开的get、set访问器 - 确认实体类的属性名称和表单中
<input>标签的name属性完全对应,大小写不敏感但建议保持一致 - 可通过浏览器F12开发者工具的「网络」标签,查看提交的请求负载是否为标准JSON格式,字段是否和实体类匹配
可选替代方案
如果不需要用JSON格式传递,也可以用表单编码方式提交,修改如下:
- 前端ajax删除
contentType配置,data字段直接传$("#formData").serialize() - 后端接口方法去掉
[FromBody]特性即可正常绑定参数
内容的提问来源于stack exchange,提问作者Sharad Kulshrestha
相关产品推荐
相关产品推荐

