Próbuję dowiedzieć się, jak wysłać pewne informacje z formularza do działania interfejsu Web API. Jest to jQuery/AJAX Próbuję użyć:Wysyłanie obiektu JSON do interfejsu API WWW
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 });
}
});
Oto mój model
public class PartSourceModel
{
public int ID { get; set; }
public int ProductID { get; set; }
public int VendorID { get; set; }
public string PartNumber { get; set; }
}
Oto mój widok
<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" />
Oto moje działania kontroler
// POST api/partsourceapi
public void Post(PartSourceModel model)
{
// currently no values are being passed into model param
}
Czego mi brakuje? teraz, gdy debuguję i przechodzę przez to, kiedy żądanie ajax uderza w działanie kontrolera, nic nie jest przekazywane do paramu modelu.
Czy próbowałeś bez 'JSON.stringify'? 'data: {model: source}', lub może po prostu 'data: source' - jQuery obsługuje konwersję dla ciebie ... – nnnnnn
Tak, próbowałem tego bez JSON.stringify, ale to też nie działało. Wypróbowałem każdą możliwą kombinację, którą mogę wymyślić po stronie AJAX, ale myślę, że jest coś, czego mi brakuje na kontrolerze. Nie wiem jednak, to jest tylko domysły. – Cory
Kiedy mówisz "nic" jest przekazywane do paramera modelu, masz na myśli, że instancja "model" ma wartość zerową? Czy też jego wartości są wartościami domyślnymi/zerowymi?Co się stanie, jeśli zmienisz typ modelu na ciąg znaków, aby uzyskać reprezentację nieprzetworzoną, a nawet usunąć parametr wejściowy i sondować właściwości Request.Content i Request.Headers bezpośrednio, aby dowiedzieć się, co otrzymuje serwer? – Snixtor