The jQuery code is :
var props = [
{ "Name": "firstName", "Value": "firstValue" },
{ "Name": "secondName", "Value": "secondValue" }
];
$.ajax({
url: '/myURL',
contentType: "application/json",
async: true,
type: "POST",
data: JSON.stringify(props),
error: function (jqXHR, textStatus, errorThrown) {
console.log("FAIL: " errorThrown);
},
success: function (data, textStatus, jqXHR) {
console.log("SUCCESS!");
}
});
The ASP.NET MVC controller
[HttpPost]
public async Task<ActionResult> Test(string myValue)
{
return Json("something");
}
I hit the controller but myValue
is null all the time.
Any idea ?
Thanks,
CodePudding user response:
Modify your API action to expect to receive the input of List<Prop>
type.
[HttpPost]
public async Task<ActionResult> Test(List<Prop> myValue)
{
return Json("something");
}
public class Prop
{
public string Name { get; set; }
public string Value { get; set; }
}
Demo
CodePudding user response:
In the view side script the myValue
parameter name should be used to make binding to work properly:
var props = [
{ "Name": "firstName", "Value": "firstValue" },
{ "Name": "secondName", "Value": "secondValue" }
];
$.ajax({
url: '@Url.Action("Test", "Home")',
contentType: "application/json",
async: true,
type: "POST",
data: { myValue: JSON.stringify(props) },
dataType: "json",
error: function (jqXHR, textStatus, errorThrown) {
console.log("FAIL: " errorThrown);
},
success: function (data, textStatus, jqXHR) {
console.log("SUCCESS!");
}
});
On the controller side:
[HttpPost]
public async Task<ActionResult> Test(string myValue)
{
var data = JsonConvert.DeserializeObject(myValue);
// TODO: ...
return Json("Success");
}
In the code above the @Url.Action("Test", "Home")'
is used and it should be replaced by proper url
.