Dotnetnuke Call ajax from a module

后端 未结 1 1933
隐瞒了意图╮
隐瞒了意图╮ 2021-01-23 21:17

I am now trying to build a dnn module using ajax calls. But there is a jquery error stating

SyntaxError: Unexpected token <

I ha

相关标签:
1条回答
  • 2021-01-23 21:25

    The problem you're running into is that DNN isn't handling the requested URL properly that you are calling. If you want to call a service URL in DNN you're going to want to setup routes to handle the 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 methods available

    [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

    sample Javascript

     //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 a user group video I did years ago on this module. https://www.youtube.com/watch?v=hBqn5TsLUxA

    0 讨论(0)
提交回复
热议问题