2016-06-28 19 views
2

Umbraco Apiクラスからデータにアクセスし、これをJavaScript関数に渡すことを試みました。すべてのヘルプは、次のエラーを乗り越えることに感謝します。 -コントローラでアクションが見つかりませんでした。UmbracoApiController

public class MapApiController : UmbracoApiController 
    { 

     [HttpPost] 
     public void GetMapMarkers(int nodeId) 
     { 
      var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); 
      var contentItem = new Node(nodeId); 

      // Get the map values 
      var map = contentItem.GetProperty("mapLocation").Value; 
      var lat = map.Split(',')[0]; 
      var lng = map.Split(',')[1]; 
      var zoom = map.Split(',')[2]; 

      var infoTitle = string.Empty; 
      if (contentItem.GetProperty("mapLocationTitle") != null) 
      { 
       infoTitle = contentItem.GetProperty("mapLocationTitle").Value; 
      } 

      var infoText = string.Empty; 
      if (contentItem.GetProperty("mapLocationInfo") != null) 
      { 
       infoText = contentItem.GetProperty("mapLocationInfo").Value; 
      } 

      string markerImageId; 
      IPublishedContent markerImage; 

      var mapSettings = JJWHelper.GetMapSettings(); 
      var markerImageUrl = mapSettings.MapPointerImage; 

      if (contentItem.HasProperty("mapPointerImage")) 
      { 
       markerImageId = contentItem.GetProperty("mapPointerImage").Value; 
       markerImage = umbracoHelper.TypedMedia(markerImageId); 
       markerImageUrl = markerImage.Url; 
      } 

      var markers = new Marker[contentItem.ChildrenAsList.Count + 1]; 

      markers[0] = new Marker 
      { 
       MapLocation = map, 
       Lat = Convert.ToDouble(lat), 
       Lng = Convert.ToDouble(lng), 
       Zoom = Convert.ToDouble(zoom), 
       InfoTitle = !string.IsNullOrEmpty(infoTitle) ? infoTitle : " ", 
       InfoText = !string.IsNullOrEmpty(infoText) ? infoText : " ", 
       MarkerImageUrl = markerImageUrl 
      }; 

      var loopCtr = 1; 

      foreach (var pointer in contentItem.ChildrenAsList) 
      { 
       map = pointer.GetProperty("mapLocation").Value; 
       lat = map.Split(',')[0]; 
       lng = map.Split(',')[1]; 
       infoTitle = pointer.GetProperty("mapLocationTitle") != null ? pointer.GetProperty("mapLocationTitle").Value : string.Empty; 
       infoText = pointer.GetProperty("mapLocationInfo") != null ? pointer.GetProperty("mapLocationInfo").Value : string.Empty; 
       markerImageId = pointer.GetProperty("mapPointerImage").Value; 
       markerImage = umbracoHelper.TypedMedia(markerImageId); 

       // Marker Image is mandatory, but issue (?) in Umbraco is allowing pointer node 
       // to be published even though a pointer image has not been selected. 
       // So, check that we actually have a marker image before adding it to the output array 
       if (markerImage == null) 
       { 
        continue; 
       } 

       markerImageUrl = markerImage.Url; 
       markers[loopCtr] = new Marker 
       { 
        MapLocation = map, 
        Lat = Convert.ToDouble(lat), 
        Lng = Convert.ToDouble(lng), 
        Zoom = Convert.ToDouble(zoom), 
        InfoTitle = !string.IsNullOrEmpty(infoTitle) ? infoTitle : " ", 
        InfoText = !string.IsNullOrEmpty(infoText) ? infoText : " ", 
        MarkerImageUrl = markerImageUrl 
       }; 

       loopCtr++; 
      } 

      var json = new JavaScriptSerializer().Serialize(markers); 

      HttpContext.Current.Response.ContentType = "application/json"; 
      HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public); 
      HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddDays(10)); 
      HttpContext.Current.Response.Cache.SetETag(nodeId.ToString(CultureInfo.InvariantCulture)); 
      HttpContext.Current.Response.Write(json); 
     } 

AJAX呼び出し - -

{,…} 
Message 
: 
"No HTTP resource was found that matches the request URI 'http://mywebsite.local/Umbraco/Api/MapApi/GetMapMarkers/4188'." 
MessageDetail 
: 
"No action was found on the controller 'MapApi' that matches the request." 

UmbracoApiControllerは、Googleの地図データと呼び出しAJAXに渡されるべきUmbracoフィールドデータ処理

var markers = (function() { 
      var json = null; 
      $.ajax({ 
       'async': false, 
       'global': false, 
       'url': "/Umbraco/Api/MapApi/GetMapMarkers/" + nodeId, 
       'dataType': "json", 
       'type': "POST", 
       'success': function (data) { 
        json = data; } }); 
      return json;} 
+0

クエリ文字列パラメータとして 'nodeId'を渡して試してみてください:'ます。http://mywebsite.local/Umbraco/Api/MapApi/GetMapMarkersのnodeId = 4188' – elolos

+0

はまだ –

答えて

0

最後に、ローカルサーバーの設定がヨーロッパの設定に設定されていたため、ドットがカンマに置き換えられました。すべてが今修正されました。

1

をこれが

を動作するはずです
$.ajax({ 
    'async': false, 
    'global': false, 
    'url': "/Umbraco/Api/MapApi/GetMapMarkers/", 
    'dataType': "json", 
    'data': { nodeId: nodeId}, 
    'type': "POST", 
    'success': function (data) { 
     json = data; } 
}); 

あなたのC#コードで:

public class TestObj 
{ 
    public int nodeId { get; set; } 
} 

public class MapApiController : UmbracoApiController 
{ 

    [System.Web.Http.HttpPost] 
    public void GetMapMarkers(TestObj t) 
    { 
     // .. 
    } 
} 
+0

Eyescreamイムは今、このエラーを取得:(動作しません - ? –

+0

イムは、今、これを取得 - 「オブジェクトのインスタンスに設定されていないオブジェクト参照を。」 ExceptionType : 「System.NullReferenceException」 メッセージ –

+0

「を私もそれにアクセスするためのstaticとしてプロパティを宣言しなければならなかったが、それはまだdoesnの –

1

正しい `HttpPost '属性を使用していることを確認してください。

標準System.Web.Mvc.HttpPost属性を使用し、System.Web.Http.HttpPost属性が必要です。

+0

Mivaweb私はすでにこれを持っていた.. –

関連する問題