Javascript 将ajax中对象的某些属性从视图传递给控制器时出现错误500
我使用带有ajax调用的web服务,希望将web服务输出保存在数据库中。但当在成功选项中从web服务获取输出时,在成功选项中不执行ajax部分,并给出错误500: POST 500(内部服务器错误)jquery-3.2.1.min.js:4 我怎样才能解决它 这是视图ajax:Javascript 将ajax中对象的某些属性从视图传递给控制器时出现错误500,javascript,c#,jquery,ajax,asp.net-mvc,Javascript,C#,Jquery,Ajax,Asp.net Mvc,我使用带有ajax调用的web服务,希望将web服务输出保存在数据库中。但当在成功选项中从web服务获取输出时,在成功选项中不执行ajax部分,并给出错误500: POST 500(内部服务器错误)jquery-3.2.1.min.js:4 我怎样才能解决它 这是视图ajax: $.each(CrisisSites, function (idx, value) { $.ajax({ url: 'https://map.ir
$.each(CrisisSites, function (idx, value) {
$.ajax({
url: 'https://map.ir/search/v2',
method: 'POST',
headers: {
'x-api-key': 'apikey'
},
contentType: 'application/json',
dataType:'JSON',
data: JSON.stringify({
'text': value.Site,
}),
success: function (data) {
dest.push(data.value[0].geom.coordinates.reverse());
value.Latitude = dest[0][0];
value.Longitude = dest[0][1];
$.ajax({
url: '/Crises/MapService',
method: 'POST',
dataType: 'JSON',
data: JSON.stringify({ id: value.Id, latitude: value.Latitude, longitude:
value.Longitude, site: value.Site }),
success:function(result)
{
alert("success");
}
});
}
这是控制器操作:
public ActionResult MapService(int id,double latitude,double longitude,
string site)
{
CrisisSite CrisisSite = new CrisisSite();
if (ModelState.IsValid)
{
var crisisId = db.CrisisSite.ToList().Max().Id;
crisisId = crisisId + 1;
CrisisSite.Site = site;
CrisisSite.Latitude = Convert.ToDecimal(latitude);
CrisisSite.Longitude = Convert.ToDecimal(longitude);
db.CrisisSite.Add(CrisisSite);
db.SaveChanges();
}
return Json(CrisisSite,JsonRequestBehavior.AllowGet);
//return View();
}
您正在将数据发布到您的操作中,因此必须使用
HttpPost
装饰您的操作。另外,您的数据必须是action方法中的对象,因此,您应该删除ajax方法中的JSON.stringify
创建用于接收post数据的类,如下所示:
public class LocationInfo
{
public int Id { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
public string Site { get; set; }
}
[HttpPost]
public ActionResult MapService(LocationInfo data)
{
CrisisSite CrisisSite = new CrisisSite();
if (ModelState.IsValid)
{
var crisisId = db.CrisisSite.ToList().Max().Id;
crisisId = crisisId + 1;
CrisisSite.Site = data.Site;
CrisisSite.Latitude = Convert.ToDecimal(data.Latitude);
CrisisSite.Longitude = Convert.ToDecimal(data.Longitude);
db.CrisisSite.Add(CrisisSite);
db.SaveChanges();
}
return Json(CrisisSite,JsonRequestBehavior.AllowGet);
//return View();
}
更改ajax方法:
$.each(CrisisSites, function (idx, value) {
$.ajax({
url: 'https://map.ir/search/v2',
method: 'POST',
headers: {
'x-api-key': 'apikey'
},
contentType: 'application/json',
dataType:'JSON',
data: JSON.stringify({
'text': value.Site,
}),
success: function (data) {
dest.push(data.value[0].geom.coordinates.reverse());
value.Latitude = dest[0][0];
value.Longitude = dest[0][1];
$.ajax({
url: '/Crises/MapService',
method: 'POST',
dataType: 'JSON',
data: { id: value.Id, latitude: value.Latitude, longitude:
value.Longitude, site: value.Site },
success:function(result)
{
alert("success");
}
});
}
你的行动方法是这样的:
public class LocationInfo
{
public int Id { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
public string Site { get; set; }
}
[HttpPost]
public ActionResult MapService(LocationInfo data)
{
CrisisSite CrisisSite = new CrisisSite();
if (ModelState.IsValid)
{
var crisisId = db.CrisisSite.ToList().Max().Id;
crisisId = crisisId + 1;
CrisisSite.Site = data.Site;
CrisisSite.Latitude = Convert.ToDecimal(data.Latitude);
CrisisSite.Longitude = Convert.ToDecimal(data.Longitude);
db.CrisisSite.Add(CrisisSite);
db.SaveChanges();
}
return Json(CrisisSite,JsonRequestBehavior.AllowGet);
//return View();
}
谢谢。已解决错误,但在控制器操作中收到纬度和经度的空值。虽然它们在ajax中有价值,但不客气。获得值后,使用
console.log(value.Latitude)
和console.log(value.Longitude)
在成功方法中检查它们的值。如果您的Id
和Site
具有值,则表示纬度
和经度
在您的成功方法中没有值,或者它们无法转换为双重
类型!我将纬度和经度的数据类型设置为十进制(9,6)。在viewmodel中,我也将它们设置为十进制。我将console.log(value.Latitude)和console.log(value.Longitude)放在success方法中,但console显示未定义的数据。如果您的控制台显示未定义的数据,则表示此行dest.push(data.value[0].geom.coordinates.reverse())代码>工作不正常。在ajax成功之前,方法dest具有正确的值。我将sql中lat和long的数据类型更改为float。但我在控制台中仍然没有定义。我将alert(value.Latitude)放在success方法中,它会正确返回Latitude。我现在应该做什么来解决这个问题?