2015-06-02 6 views
0

Я ищу, чтобы отправить formdata в C# web api и работать с привязкой к модели. Похоже, это должно быть возможно, но мой объект никогда не заселен. Я хочу, чтобы код был простым и гибким. то есть. Я не хочу добавлять новый json-атрибут к моему вызову ajax каждый раз, когда добавляю новое поле формы, и я хотел бы передавать файлы, если захочу (не ожидая привязки файлов к модели).post formdata через ajax to webapi

Вот в основном то, что у меня есть на данный момент.

$('.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() { } 
} 

и образец разместить данные

------WebKitFormBoundaryc6x6E9JewE0ln4ql 
Content-Disposition: form-data; name="live" 

on 
------WebKitFormBoundaryc6x6E9JewE0ln4ql 
Content-Disposition: form-data; name="genus" 

test genus name 
------WebKitFormBoundaryc6x6E9JewE0ln4ql 
Content-Disposition: form-data; name="species" 

test species name 
------WebKitFormBoundaryc6x6E9JewE0ln4ql 
Content-Disposition: form-data; name="variety_name" 

test variety name 
------WebKitFormBoundaryc6x6E9JewE0ln4ql-- 

В результате экземпляр растение не равно нулю, но все атрибуты равны нулю, следовательно пустую строку, вставленную в базу данных. Так что я слишком много прошу, или я все об этом ошибаюсь?

+0

Было бы полезно знать, что ваш объект Завод выглядит. Кроме того, если вы посмотрите в инструментах разработчика в своем браузере, что это сообщение на сервер? – peinearydevelopment

+0

не беспокоиться, у меня включена дополнительная информация – crazyhor77

ответ

0

Я хотел бы использовать скрипач, чтобы проверить почту в URL службы, но данные, которые вы отправляете должен быть в формате JSON Я довольно уверен:

{ plant_id: 1, live: true, genius: "test genius", ... } 

Какой выход из new FormData($('form')[0]), что он посылает как данные POST?

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); 
     } 
    }); 
}); 
Смежные вопросы