AngularJS向ASP.NET MVC控制器传递对象失败问题排查
AngularJS向MVC控制器传值为null?我来帮你搞定!
嘿,我之前踩过一模一样的坑!你现在的问题根源在于AngularJS的$http.post参数传递方式不对,导致MVC的模型绑定没法正确识别你传的数据。
问题出在哪?
你现在用的是{ params: { model: model } }作为$http.post的第二个参数,这会让Angular把数据拼到URL的查询参数里(比如/Test/Save?model.Name=some+string),但你的MVC控制器是[HttpPost]方法,它默认是从请求体里读取数据的,自然就拿不到值啦!
解决方案来啦
1. 先确认你的MVC控制器方法
确保控制器上标了[HttpPost],并且参数是和Angular里结构一致的模型类:
// 先定义对应的模型类 public class YourModel { public string Name { get; set; } // 其他属性... } [HttpPost] public ActionResult Save(YourModel model) { // 这里就能拿到model.Name的值啦 return Json(new { success = true }); }
2. 修改AngularJS的save函数
直接把model作为请求体发送,不要包在params里:
function save(model, success, error) { // 注意看,第二个参数直接传model,不是params包裹的对象 return $http.post('/Test/Save', model) .success(function(response) { success(response); }) .error(function(err) { error(err); }); }
3. 额外检查点
- 模型类的属性名称要和Angular里的
model属性完全匹配(MVC模型绑定大小写不敏感,但最好统一写法避免坑) - 打开浏览器F12的Network标签,查看请求的
Request Payload,确认是不是有{"Name":"some string"}这样的JSON数据 - 确保Angular的
$http没有被全局修改过请求头,默认的Content-Type: application/json是MVC能正确解析的格式
这样改完之后,你的MVC控制器应该就能正常接收到值啦!
内容的提问来源于stack exchange,提问作者Prokurors
相关产品推荐
相关产品推荐

