MVC中如何通过FormData向控制器提交包含嵌套类的表单数据
问题原因
FormData的append()方法传入非基础类型(比如自定义对象)时,会自动调用对象的toString()方法转成[object Object]格式的字符串,ASP.NET 默认模型绑定器无法识别该格式,因此嵌套的UserAdres属性无法完成绑定,始终为null。
解决方法
按照ASP.NET 模型绑定的命名规则,嵌套类的属性需要用 「外层属性名.内层属性名」 的点语法格式作为键单独添加到FormData中,修改后的代码如下:
var formdata = new FormData(); formdata.append('ID', 1); formdata.append('UserName', 'Emre'); formdata.append('Password', '112233'); // 单独添加嵌套类的每个属性,键名用点语法拼接 formdata.append('UserAdres.ID', 1); formdata.append('UserAdres.Sehir', 'Istanbul'); formdata.append('UserAdres.Ilce', 'Kadikoy'); formdata.append('UserAdres.Mahalle', 'Kemal'); formdata.append('UserAdres.Sokak', 'Yok'); $.ajax({ type: 'POST', url: '/Users/Kaydet', dataType: 'json', processData: false, contentType: false, data: formdata }).done(function (Result) { // 后续业务逻辑 });
补充说明
如果存在多级嵌套的情况,按照同样的规则拼接键名即可,比如UserAdres.Coordinate.Lat、UserAdres.Coordinate.Lng这种格式,默认模型绑定器就能自动完成多层嵌套类的参数绑定。
内容的提问来源于stack exchange,提问作者Haydar Cabbar
相关产品推荐
相关产品推荐

