我希望将formdata发布到c#web api并使模型绑定工作。这看起来应该是可能的,但我的对象从未填充过。我想保持代码简单灵活。即。我不想每次添加新的表单字段时都为我的ajax调用添加一个新的json属性,如果我愿意,我想传递文件(不要期望文件绑定到模型)。
这基本上就是我现在所拥有的。
"_id"
并在我的控制器中
$('.save').click(function () {
$.ajax({
url: 'api/plant/insert',
data: new FormData($('form')[0]),
type: 'POST',
processData: false,
contentType: 'application/x-www-form-urlencoded',
beforeSend: function () {
$.processing({ content: 'Saving Plant' });
},
error: function () {
$.error({ content: 'An error occurred saving the plant' });
},
success: function (data) {
location.assign('PlantEdit.cshtml?plant_id=' + data);
}
});
});
和我的模特
public int Insert([FromBody] Plant plant)
{
return plant.Insert();
}
和样本发布数据
public class Plant : Data
{
public int plant_id { get; set; }
public bool live { get; set; }
public string genus { get; set; }
public string species { get; set; }
public string variety_name { get; set; }
public Plant() { }
}
结果是工厂实例不为null,但所有属性都为null,因此将空行插入数据库。所以我要求的太多了,或者我是不是错了?
答案 0 :(得分:0)
我会使用fiddler测试帖子到服务URL,但是你发布的数据应该是json格式我非常确定:
{ plant_id: 1, live: true, genius: "test genius", ... }
它作为POST数据发送的new FormData($('form')[0])
的输出是什么?
答案 1 :(得分:0)
基于此answer,我相信你需要做这样的事情:
$('.save').click(function () {
var fd = new FormData();
fd.append( 'name', $('form')[0] );
$.ajax({
url: 'api/plant/insert',
data: fd,
type: 'POST',
processData: false,
contentType: false,
beforeSend: function () {
$.processing({ content: 'Saving Plant' });
},
error: function () {
$.error({ content: 'An error occurred saving the plant' });
},
success: function (data) {
location.assign('PlantEdit.cshtml?plant_id=' + data);
}
});
});