我正在使用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调用中,它不起作用。如果有人可以显示我的错误,那将很好。预先感谢!
答案 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" });
}
测试结果
答案 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);
}