gpt4 book ai didi

javascript - 如何将 DbGeography 参数发布到 MVC?

转载 作者:行者123 更新时间:2023-11-30 12:31:52 26 4
gpt4 key购买 nike

我正在尝试公开一个 API,允许用户发布多边形以保留在服务器上。我正在使用 ASP.NET MVC 5。如何正确格式化 AJAX 参数以发布对 DbGeography 的请求?这就是我正在尝试的:

$.ajax({
url: '/api/map',
type: 'POST',
data: {
Title: 'My Title',
MyGEOG: {
WellKnownText: 'POLYGON ((30 10, 10 20, 20 40, 40 40, 30 10))'
}
}
});

这是我的 MVC Action 签名的样子:

    [HttpPost]
[Route("map")]
public JsonResult Post(MyShape newShape) {...}

还有我的 MyShape 类:

public class MapShape
{
public string Title { get; set; }
public System.Data.Entity.Spatial.DbGeography MyGEOG { get; set; }
}

在操作中放置断点时,newShape.Title 确实显示为 My Title,但是当 AJAX post 发生时 MyGEOG 为 null .作为 DbGeography 类型正确发布的参数的正确格式是什么?

最佳答案

DBGeography 对象是不可变的,这意味着一旦创建它就无法对其进行写入。在模型联编程序中实例化 MapShape 类时,MyGEO 属性为空。换句话说,您正试图在空对象上设置属性。

“创建”DBGeography 对象的唯一方法是使用工厂方法之一,例如:

FromText - 根据指定的已知文本值创建新的 DbGeometry 值。 http://msdn.microsoft.com/en-us/library/hh673669(v=vs.110).aspx

因此,要将 TitleWellKnownText 值传递给您的 Controller ,我建议创建一个数据传输对象 (DTO) 来执行作为信息的代理。

public class MapShapeDTO
{
public string Title { get; set; }
public string WellKnownText { get; set; }
}

你的 Ajax 被简化成这样

$.ajax({
url: '/api/map',
type: 'POST',
data: {
Title: 'My Title',
WellKnownText: 'POLYGON ((30 10, 10 20, 20 40, 40 40, 30 10))'
}
});

和您的 Controller ,您可以使用 DTO 来创建 MapShape 对象。

[HttpPost]
[Route("map")]
public JsonResult Post(MapShapeDTO dto)
{
MapShape m = new MapShape()
{
Title = dto.Title,
MyGEOG = System.Data.Entity.Spatial.DbGeography.FromText(dto.WellKnownText)
};
...
}

关于javascript - 如何将 DbGeography 参数发布到 MVC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27476020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com