ASP.NET Core 2.0中.ajax()数据参数无法传递至C#控制器函数问题
ASP.NET Core 2.0 Ajax传参控制器接收为Null的问题解决
我之前也碰到过一模一样的情况,ASP.NET Core的模型绑定逻辑和MVC5确实有不少差异,这就是你参数一直为null的核心原因。咱们一步步拆解来看:
问题根源
你前端设置了contentType: "application/json; charset=utf-8",也就是把请求体以JSON格式发送,但ASP.NET Core默认不会自动将JSON格式的请求体绑定到**简单类型(比如string、int)**的控制器参数上。而MVC5的绑定逻辑相对宽松,会自动处理这种场景,所以之前在MVC5里能正常运行。
两种有效解决办法
办法一:给控制器参数添加[FromBody]特性
直接修改控制器方法,给参数加上[FromBody]特性,明确告诉ASP.NET Core要从请求体里读取这个参数:
public string UpdateBulkStatus([FromBody] string idChecked) { return "abc"; }
这种方式下,你现有的前端代码完全不用改动,就能正常接收到参数值了。
办法二:调整Ajax的参数传递格式
如果不想修改控制器代码,可以把Ajax的请求格式改成表单提交的默认格式——去掉contentType设置(jQuery Ajax默认就是application/x-www-form-urlencoded),同时data直接传键值对而不是JSON字符串:
var idChecked = 5; $.ajax({ type: "POST", url: "/BlogCategory/UpdateBulkStatus", data: { idChecked: idChecked }, dataType: "html", success: function (msg) { }, error: function (req, status, error) { } });
这种方式下,控制器的参数不需要加任何特性,就能自动绑定到传递的值。
额外小提醒
如果之后你要传递复杂对象(比如自定义的实体类),ASP.NET Core默认会从请求体绑定JSON格式的参数,这时候反而不需要额外加特性,框架会自动处理。但简单类型必须明确指定[FromBody]或者用表单格式传递,这点和MVC5的区别一定要记牢哦。
内容的提问来源于stack exchange,提问作者yogihosting
相关产品推荐
相关产品推荐

