Отправка объекта JSON в Web API
Я пытаюсь выяснить, как я могу отправить некоторую информацию из формы в действие веб-API. Это jQuery/AJAX, который я пытаюсь использовать:
var source = {
'ID': 0,
'ProductID': $('#ID').val(),
'PartNumber': $('#part-number').val(),
'VendorID': $('#Vendors').val()
}
$.ajax({
type: "POST",
dataType: "json",
url: "/api/PartSourceAPI/",
data: JSON.stringify({ model: source }),
success: function (data) {
alert('success');
},
error: function (error) {
jsonValue = jQuery.parseJSON(error.responseText);
jError('An error has occurred while saving the new part source: ' + jsonValue, { TimeShown: 3000 });
}
});
Вот моя модель
public class PartSourceModel
{
public int ID { get; set; }
public int ProductID { get; set; }
public int VendorID { get; set; }
public string PartNumber { get; set; }
}
Вот мой взгляд
<div id="part-sources">
@foreach (SmallHorse.ProductSource source in Model.Sources)
{
@source.ItemNumber <br />
}
</div>
<label>Part Number</label>
<input type="text" id="part-number" name="part-number" />
<input type="submit" id="save-source" name="save-source" value="Add" />
Вот мой контроллер действия
// POST api/partsourceapi
public void Post(PartSourceModel model)
{
// currently no values are being passed into model param
}
Что мне не хватает? Прямо сейчас, когда я отлаживаю и прохожу через это, когда запрос ajax попадает в действие контроллера, в параметр модели ничего не передается.
4 ответа
Попробуй это:
JQuery
$('#save-source').click(function (e) {
e.preventDefault();
var source = {
'ID': 0,
//'ProductID': $('#ID').val(),
'PartNumber': $('#part-number').val(),
//'VendorID': $('#Vendors').val()
}
$.ajax({
type: "POST",
dataType: "json",
url: "/api/PartSourceAPI",
data: source,
success: function (data) {
alert(data);
},
error: function (error) {
jsonValue = jQuery.parseJSON(error.responseText);
//jError('An error has occurred while saving the new part source: ' + jsonValue, { TimeShown: 3000 });
}
});
});
контроллер
public string Post(PartSourceModel model)
{
return model.PartNumber;
}
Посмотреть
<label>Part Number</label>
<input type="text" id="part-number" name="part-number" />
<input type="submit" id="save-source" name="save-source" value="Add" />
Теперь, когда вы нажимаетеAdd
после заполнения текстового поля controller
будет выплевывать то, что вы написали в PartNumber
коробка в оповещении.
Изменить:
data: JSON.stringify({ model: source })
Для того, чтобы:
data: {model: JSON.stringify(source)}
И в вашем контроллере вы делаете это:
public void PartSourceAPI(string model)
{
System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();
var result = js.Deserialize<PartSourceModel>(model);
}
Если URL, который вы используете в JQuery, /api/PartSourceAPI
тогда имя контроллера должно быть api
и действие (метод) должно быть PartSourceAPI
var model = JSON.stringify({
'ID': 0,
'ProductID': $('#ID').val(),
'PartNumber': $('#part-number').val(),
'VendorID': $('#Vendors').val()
})
$.ajax({
type: "POST",
dataType: "json",
contentType: "application/json",
url: "/api/PartSourceAPI/",
data: model,
success: function (data) {
alert('success');
},
error: function (error) {
jsonValue = jQuery.parseJSON(error.responseText);
jError('An error has occurred while saving the new part source: ' + jsonValue, { TimeShown: 3000 });
}
});
var model = JSON.stringify({ 'ID': 0, ...': 5, 'PartNumber': 6, 'VendorID': 7 }) // output is "{"ID":0,"ProductID":5,"PartNumber":6,"VendorID":7}"
ваши данные выглядят примерно так: "{"model": "ID":0,"ProductID":6,"PartNumber":7,"VendorID":8}}" контроллер веб-API не может привязать их к вашей модели
Я считаю, что вам нужны цитаты по всему model
:
JSON.stringify({ "model": source })