[英]Passing Lists to Controller Asp.Net MVC Json
我在将列表数据从JS传递到Controller时遇到问题,因为列表是字符串化的,ajax没有提交给Controller。 我应该对javascript和控制器方法进行哪些更改。 任何帮助,都可以实现。
Java脚本
$('#submit').click(function () {
var isAllValid = true;
var list = [];
var orderItem = {
Agency: $('.AgentName', this).val(),
SectorPair: $('select.sectorCategory', this).val().trim(),
ForPAX: $('.foreignPax', this).val(),
IndPAX: $('.indianPax', this).val(),
FlightDate: $('.flightDate', this).val(),
Airlines: $('select.airlineCategory', this).val().trim()
}
list.push(orderItem);
//}
})
$.ajax({
type: 'POST',
url: '/DomesticDeparture/Create',
data: JSON.stringify(list),
contentType: 'application/json',
success: function (data) {
if (data.status) {
alert('Successfully saved');
//here we will clear the form
list = [];
$('#airlineName,#departureDate').val('');
$('#orderdetailsItems').empty();
$('#AgentName').focus();
}
else {
alert('Error');
}
$('#submit').text('Save');
},
error: function (error) {
console.log(error);
$('#submit').text('Save');
}
});
}
});
和控制器 :
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create( List<DomesticDepartureEntry> dentries)
{
if (ModelState.IsValid)
{
foreach (var a in dentries)
{
db.DomesticDepartureEntries.AddRange(dentries);
db.SaveChanges();
}
}
return View();
}
制作如下所示的API控制器:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public class ValuesController : ApiController
{
[HttpPost]
[Route("api/CreateRecord")]
public async Task<HttpResponseMessage> CreateRecord([FromBody] List<DomesticDepartureEntry> dentries)
{
try
{
if (ModelState.IsValid)
{
db.DomesticDepartureEntries.AddRange(dentries);
db.SaveChanges();
return new HttpResponseMessage()
{
Content = new ObjectContent<JObject>(new JObject { new JProperty("message", "Record successfully inserted into the database!") }, new JsonMediaTypeFormatter()),
StatusCode = HttpStatusCode.OK
};
}
}
catch(Exception ex)
{
return new HttpResponseMessage()
{
Content = new ObjectContent<JObject>(new JObject { new JProperty("message", $"Failed because: {ex.Message}") }, new JsonMediaTypeFormatter()),
StatusCode = HttpStatusCode.ExpectationFailed
};
}
}
}
您不向AJAX成功回调返回视图,而是向回调返回JSON对象以及状态码。
并修改您的AJAX调用以将其路由到以下Web API:
$.ajax({
method: 'POST',
url: 'api/CreateRecord',
data: JSON.stringify(list),
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function (data)
{
if(!$.isEmptyObject(data)){
console.log( data["message"] );
alert( data["message"]);
//Your business logic
//here we will clear the form
list = [];
$('#airlineName,#departureDate').val('');
$('#orderdetailsItems').empty();
$('#AgentName').focus();
}
else
alert('Some error occured!');
},
error: function ( jqXHR, errorThrown, statusText )
{
console.log( errorThrown );
alert(errorThrown);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.