The problem you are working with is that DNN does not correctly handle the requested URL that you are calling. If you want to call the service URL in DNN, you need to set up routes to handle calls.
namespace Christoc.Com.Modules.SlidePresentation.services { public class SlidePresentationRouteMapper : IServiceRouteMapper { public void RegisterRoutes(IMapRoute mapRouteManager) { mapRouteManager.MapRoute("SlidePresentation", "{controller}.ashx/{action}", new[] {"Christoc.Com.Modules.SlidePresentation.services"}); } } }
In the controller you can define the available methods
[DnnAuthorize(AllowAnonymous = true)] public ActionResult ListOfSlides() { try { var slides = Slide.GetSlides(ActiveModule.TabID, ActiveModule.ModuleID); return Json(slides, JsonRequestBehavior.AllowGet); } catch (Exception exc) { DnnLog.Error(exc); return Json(null, JsonRequestBehavior.AllowGet); } }
https://slidepresentation.codeplex.com/SourceControl/latest#DesktopModules/SlidePresentation/services/SlidePresentationController.cs
javascript sample
//get slides on initialization this.init = function(element) { //var data = {}; //removed because we don't need this //data.moduleId = moduleId; //removed because we don't need this when calling setModuleHeaders //data.tabId = tabId; //removed because we don't need this //serviceFramework.getAntiForgeryProperty(); //removed because we don't need this $.ajax({ type: "POST", cache: false, url: baseServicePath + 'ListOfSlides', //data: data, //dataType:"json", beforeSend: serviceFramework.setModuleHeaders }).done(function(data) { viewModel.slides = ko.utils.arrayMap(data, function(s) { return new slide(s); }); ko.applyBindings(viewModel); $(element).jmpress(); }).fail(function () { Console.Log('Sorry failed to load Slides'); }); };
Here's an example module that does this
https://slidepresentation.codeplex.com/
And the user group video that I made a few years ago in this module. https://www.youtube.com/watch?v=hBqn5TsLUxA
source share