AJAX提交checkbox表单时控制器接收的SearchModel中Status为null如何解决
问题原因
- AJAX传参时多包装了一层结构。
serialize()方法输出的已经是标准application/x-www-form-urlencoded格式的参数字符串,直接作为请求体提交即可,你将它套入{model: model}结构后,相当于把整个序列化字符串作为名为model的参数的值提交,ASP.NET的模型绑定器无法匹配SearchModel的结构,因此绑定失败,Status属性为null。 - 额外注意:未勾选的复选框不会被
serialize()采集,对应索引的Status[i].Selected字段不会出现在请求中,模型绑定会自动给该属性赋值默认值false,只要对应索引的Status[i].ItemText存在就不影响集合绑定。
修复方案
- 修改AJAX提交代码,直接传递序列化后的表单参数即可:
$(document).on("click", "#search", function () { var formData = $('#divSearchParams').find("input,select,textarea").serialize(); $.ajax({ url: targetUrl, type: 'POST', data: formData, // 无需套对象,直接传入序列化结果 cache: true, async: true, }).done(function (result) { }).fail(function (error) { }).always(function () { }); });
- 可选补充:控制器Action显式指定绑定来源,避免部分配置差异导致的绑定异常:
public async Task<ActionResult> Students([FromForm] SearchModel model) { }
内容的提问来源于stack exchange,提问作者The_Outsider
相关产品推荐
相关产品推荐

