Javascript 将ajax中对象的某些属性从视图传递给控制器时出现错误500

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

我使用带有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/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。我现在应该做什么来解决这个问题?