2014-12-15 2 views
1

사용자가 서버에 유지하기 위해 다각형을 게시 할 수있게 해주는 API를 공개하려고합니다. ASP.NET MVC 5를 사용하고 있습니다. DbGeography 요청을 게시하려면 AJAX 매개 변수를 올바르게 형식을 지정하려면 어떻게해야합니까? 이것은 내가 노력하고 무엇 :MVC에 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 액션 서명이 모습입니다 같은 : 또한

[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.TitleMy Title으로 표시되지만 AJAX 게시가 발생하면 MyGEOG은 null입니다. DbGeography 유형으로 올바르게 게시 할 매개 변수의 올바른 형식은 무엇입니까?

+0

데이터를 API 측에 저장하려는 방법을 더 명확히 나타내려면 newShape 클래스 정의를 포함시켜주십시오. –

+0

나는 그것을 새롭게했다! – TruMan1

+0

고도에 지형이 필요했습니다. – TruMan1

답변

3

DBGeography 개체가 불변 인 이유는 해당 개체를 작성한 후에 쓸 수 없다는 것을 의미합니다. 모델 바인더에서 MapShape 클래스를 인스턴스화하면 MyGEO 속성은 null입니다. 즉, null 객체에 대한 속성을 설정하려고합니다.

"생성"하는 DBGeography 객체가 같은 공장 방법 중 하나를 사용하는 유일한 방법 :

FromText이 - 지정된 잘 알려진 텍스트 값을 기반으로 새 DbGeometry 값을 작성합니다. http://msdn.microsoft.com/en-us/library/hh673669(v=vs.110).aspx

그래서, 당신은 내가 정보에 대한 프록시 역할을하는 데이터 전송 개체 (DTO)을 생성 제안, 컨트롤러에 및 값을 WellKnownText 제목에 전달합니다.

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

귀하의 아약스이

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

그리고 컨트롤러처럼 단순화됩니다, 당신은 MapShape 객체를 생성하기 위해 DTO를 사용할 수 있습니다.

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

이 해결 방법은 해결 방법으로 만 사용할 수 있습니다. 왜 이런 종류의 문제를 해결하기 위해 (ModelBinder 등을 사용하는)보다 우아한 방법이 없습니까? 사람들은 웹 전체에서이 문제에 대한 도움을 구하고 있습니다. – Believe2014

관련 문제