将formdata通过ajax发布到webapi

时间:2015-06-02 14:53:37

标签: c# ajax razor asp.net-web-api

我希望将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,因此将空行插入数据库。所以我要求的太多了,或者我是不是错了?

2 个答案:

答案 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);
        }
    });
});