c# 4.0 - mostrar - Envío de objeto JSON a la API web
recorrer objeto json javascript (4)
Cambio:
data: JSON.stringify({ model: source })
A:
data: {model: JSON.stringify(source)}
Y en tu controlador haces esto:
public void PartSourceAPI(string model)
{
System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();
var result = js.Deserialize<PartSourceModel>(model);
}
Si la URL que utiliza en jquery es /api/PartSourceAPI
, el nombre del controlador debe ser api
y la acción (método) debe ser PartSourceAPI
Estoy intentando descubrir cómo puedo enviar información de un formulario a una acción de API web. Este es el jQuery / AJAX que trato de usar:
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 });
}
});
Aquí está mi modelo
public class PartSourceModel
{
public int ID { get; set; }
public int ProductID { get; set; }
public int VendorID { get; set; }
public string PartNumber { get; set; }
}
Aquí está mi vista
<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" />
Aquí está mi acción de controlador
// POST api/partsourceapi
public void Post(PartSourceModel model)
{
// currently no values are being passed into model param
}
¿Qué me estoy perdiendo? ahora cuando depuro y paso por esto cuando la solicitud de ajax golpea la acción del controlador, no pasa nada al parametro del modelo.
Creo que necesitas cotizaciones alrededor del model
:
JSON.stringify({ "model": source })
Prueba esto:
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 });
}
});
});
Controlador
public string Post(PartSourceModel model)
{
return model.PartNumber;
}
Ver
<label>Part Number</label>
<input type="text" id="part-number" name="part-number" />
<input type="submit" id="save-source" name="save-source" value="Add" />
Ahora cuando haga clic en " Add
" después de completar el cuadro de texto, el controller
escupirá nuevamente lo que escribió en el cuadro PartNumber
en una alerta.
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}"
sus datos son algo así como "{" modelo ":" ID ": 0," ProductID ": 6," PartNumber ": 7," VendorID ": 8}}" controlador web api no puede vincularlo a su modelo