我有一个Openlayer的地图界面,用于捕获用户在地图上添加的新点。我想要的是获取这些位置数据点并将其保存到数据库中。所以我在.cshtml页面上有一个工作函数,如下所示:
map.on('dblclick', function (evt) {
var coordinate = evt.coordinate;
var datapoints = new Array();
var features = source.getFeatures();
for (var i = 0; i < features.length; i++) {
var poi = features[i];
var datapt = new Object();
datapt.X = poi.values_.geometry.flatCoordinates[0];
datapt.Y = poi.values_.geometry.flatCoordinates[1];
datapoints.push(datapt);
}
var xhr = new XMLHttpRequest();
xhr.open("POST", "Draw_Features", true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify(datapoints));
});
这似乎工作得很好,并且正在发送回所有位置的编码JSON。在我的Controller文件中,我有以下内容:
[HttpGet]
public IActionResult Draw_Features()
{
return View();
}
[HttpPost]
public IActionResult Draw_Features(string someValue)
{
//TODO
return View("Index");
}
[HttpPost]
public IActionResult AddPointsToDB(string someValue)
{
//TODO
return View("Index");
}
我有两个问题:
1)我想将数据返回到“ AddPointsToDB()”函数,但它改为转到“ Draw_Features()”。如何在xhr.send()中指定正确的登陆功能?
2)我期望函数通过'string someValue'变量接收JSON。但是该变量为NULL。从函数内部访问JSON的正确方法是什么?
谢谢!
编辑:修复了遭到轰炸的JSON转换代码。还是同样的问题...
编辑2:显示来自Chrome的POST数据
答案 0 :(得分:0)
有关有效的演示,请按照以下步骤操作:
定义一个新模型以接收数据而不是字符串输入。为了将datapoints
传递给控制器动作,它将通过MVC内置函数进行序列化和反序列化。
public class Coordinate
{
public double X { get; set; }
public double Y { get; set; }
}
使用[FromBody]IList<Coordinate> coordinates
更改操作,该操作将指定模型绑定以从主体读取模型。
public IActionResult AddPointsToDB([FromBody]IList<Coordinate> coordinates)
{
//TODO
return View("Index");
}
已经指出,请确保将xhr.open("POST", "AddPointsToDB", true);
设置为所需的动作名称。