Javascript对象作为空对象传递给控制器​​“ Uncaught ReferenceError:数据未定义”

时间:2019-12-17 21:34:38

标签: javascript ajax asp.net-core .net-core-3.0

我正在使用asp.net core 3.0开发openstreetmap。我正在尝试从地图中获取纬度,经度的其他详细信息作为javascript对象,并将其发送到控制器。为此,我实现了一个AJAX请求,以将javascript对象传递给控制器​​。但是控制器将对象的值接收为null。我想知道我在哪里做错了。还是版本问题?这是我的下面的代码,

我的模型班

public class LocationModel
{
    public int LocationId { get; set; }
    public string LocationName { get; set; }
    public string Note { get; set; }
    public double Latitude { get; set; }
    public double Longitude { get; set; }
}

我的Controller-Action方法

[HttpPost]
    public JsonResult Save(LocationModel details)
    {
        return Json(new { result = "OK"});
    }

我的客户端代码

map.on('click', function (e) {
        var name = window.prompt("Add Location Name:", "Text");
        var note = window.prompt("Add Note:", "Text");
        var latitude = e.latlng.lat;
        var longitude = e.latlng.lng;

        var locationdetails = { "LocationName": name, "Note": note, "Latitude": latitude, "Longitude": longitude };
        console.log(locationdetails);

        $.ajax({
            type: "POST",
            url: '/Home/Save',
            contentType: "application/json",
            dataType: "json",
            data: JSON.stringify({details: locationdetails}),
            success: function (response) {
                alert(data);
            },
            error: function (xhr) {
                console.log(xhr.responseText);
                alert("Error has occurred..");
            }
        });
    });

在这里, locationdetails 变量包含我需要传递给控制器​​的所有详细信息。在AJAX调用中,它不起作用。如果有人可以显示我的错误,那将很好。预先感谢!

3 个答案:

答案 0 :(得分:1)

  

控制器将对象的值接收为空。

要获取期望的数据,可以修改如下代码。

jQuery AJAX代码

$.ajax({

    //...
    //other options
    //...

    data: JSON.stringify(locationdetails),
    success: function (response) {
        alert(response.result);
    },

    //...
});

控制器操作

[HttpPost]
public JsonResult Save([FromBody]LocationModel details)
{
    return Json(new { result = "OK" });
}

测试结果

enter image description here

答案 1 :(得分:0)

很好的C#模型的键是大写的。 javascript对象

var locationdetails = { "name": name, "note": note, "latitude": latitude, "longitude": longitude };

具有小写字母的键。 C#中间件映射器无法映射,并且解析为null。尝试以下

var locationdetails = { "Name": name, "Note": note, "Latitude": latitude, "Longitude": longitude };

您可能会丢失locationId,因为我在任何地方都看不到它。

答案 2 :(得分:0)

当您的成功函数中的参数为alert时,您正在data上使用response –以下是损坏的:

            success: function (response) {
                alert(data);
            }

(清晰度编辑)

下面应该可以正常工作:

            success: function (response) {
                alert(response);
            }